সি # ব্যবহার করে ইউআরএল এনকোডিং


340

আমার কাছে একটি অ্যাপ্লিকেশন রয়েছে যা ভিবি ফোরাম সফ্টওয়্যারটিতে একটি পোষ্ট অনুরোধ প্রেরণ করে এবং কাউকে লগ ইন করে (কুকিজ বা কিছু সেট না করে)।

একবার ব্যবহারকারী লগ ইন হয়ে গেলে আমি একটি পরিবর্তনশীল তৈরি করি যা তাদের স্থানীয় মেশিনে একটি পথ তৈরি করে।

C: \ tempfolder \ তারিখ \ ব্যবহারকারী নাম

সমস্যাটি হ'ল কিছু ব্যবহারকারীর নাম "অবৈধ অক্ষর" ব্যতিক্রম ছুঁড়ে দিচ্ছে। উদাহরণস্বরূপ, যদি আমার ব্যবহারকারীর নামটি হয় তবে mas|fenixএটি একটি ব্যতিক্রম নষ্ট করবে ..

Path.Combine( _      
  Environment.GetFolderPath(System.Environment.SpecialFolder.CommonApplicationData), _
  DateTime.Now.ToString("ddMMyyhhmm") + "-" + form1.username)

আমি এটি স্ট্রিং থেকে অপসারণ করতে চাই না, তবে সার্ভারে এফটিপি এর মাধ্যমে তাদের ব্যবহারকারীর নাম সহ একটি ফোল্ডার তৈরি করা হয়েছে। এবং এটি আমার দ্বিতীয় প্রশ্নের দিকে পরিচালিত করে। আমি যদি সার্ভারে একটি ফোল্ডার তৈরি করছি তবে আমি কি "অবৈধ অক্ষর" এ রেখে দিতে পারি? আমি কেবল এটি জিজ্ঞাসা করেছি কারণ সার্ভারটি লিনাক্স ভিত্তিক, এবং লিনাক্স এটি গ্রহণ করে কিনা তা আমি নিশ্চিত নই।

সম্পাদনা: দেখে মনে হচ্ছে যে ইউআরএল এনকোডটি আমি চাই তা নয় .. আমি যা করতে চাই তা এখানে:

old username = mas|fenix
new username = mas%xxfenix

যেখানে% xx হল ASCII মান বা অন্য কোনও মান যা সহজেই অক্ষর সনাক্ত করতে পারে।


ফাইল সিস্টেমকে নিরাপদ ফোল্ডারের নামগুলি তৈরি করতে এটি অন্তর্ভুক্ত করুন: http://stackoverflow.com/questions/333175/is-there-a-way-of-making-strings-file-path-safe-in-c
মিস ফাগি

উত্তর:


191

সম্পাদনা: দ্রষ্টব্য যে এই উত্তরটি এখন পুরানো। আরও ভাল করার জন্য নীচে সিয়েরেই কুচুকের উত্তর দেখুন

আপনি এখানে প্রস্তাব দিচ্ছেন urlCoding করবে। সি # দিয়ে আপনি HttpUtilityউল্লিখিত হিসাবে কেবল ব্যবহার করুন ।

আপনি অবৈধ চরিত্রগুলিকেও রেজেক্স করতে পারেন এবং তারপরে প্রতিস্থাপন করতে পারেন, তবে এটি আরও জটিল হয়ে যায়, কারণ সঠিক অক্ষরগুলির সাথে প্রতিস্থাপন করতে আপনার কিছু ফর্ম স্টেট মেশিন (স্যুইচ ... কেস) থাকতে হবে। থেকেUrlEncode এটি সামনে কাজ করে, এটি বরং সহজ।

লিনাক্স বনাম উইন্ডোজ হিসাবে, কিছু অক্ষর রয়েছে যা লিনাক্সে গ্রহণযোগ্য যা উইন্ডোজে নেই, তবে আমি এটি নিয়ে উদ্বিগ্ন হব না, যেহেতু ফোল্ডারটির নামটি ইউআরআল স্ট্রিংটি ডিকোড করে ব্যবহার করা যেতে পারে UrlDecode, যাতে আপনি ভ্রমণকে গোল করে দেখতে পারেন পরিবর্তন।


5
এই উত্তর এখন পুরানো। নীচে কয়েকটি উত্তরগুলো পেতে - .net45 এই তারিখ অনুযায়ী সঠিক সমাধান হতে পারে: msdn.microsoft.com/en-us/library/...
blueberryfields

1
এফটিপি-র জন্য প্রতিটি উরি অংশ (ফোল্ডার বা ফাইলের নাম) Uri.EcreenDataString (fileOrFolderName) ব্যবহার করে নির্মিত হতে পারে সমস্ত উরির সাথে সামঞ্জস্যপূর্ণ অক্ষর (স্পেস, ইউনিকোড ...) allowing উদাহরণস্বরূপ ফাইলনামে যে কোনও চরিত্রের অনুমতি দেওয়ার জন্য, ব্যবহার করুন: req = (FtpWebRequest) WebRequest.Create (নতুন উরি (পথ + "/" + উরি.এস্কেপডাটাস্ট্রিং (ফাইলের নাম)); এইচটিটিপি ইউটিলিটি ব্যবহার করে rআরলিঙ্কোড () ফাঁকা স্থানগুলি আরও লক্ষণ (+) দ্বারা প্রতিস্থাপন করুন। অনুসন্ধান ইঞ্জিনগুলির জন্য একটি সঠিক আচরণ তবে ফাইল / ফোল্ডার নামগুলির জন্য ভুল।
রেনেউদ ব্যানসেল

আপনি যখন জেএস স্ক্রিপ্ট যুক্ত করার চেষ্টা করবেন তখন সতর্কতা পাওয়ার সাথে সাথে এসএসপিএনএস বেশিরভাগ ইউএসএলকে অবরুদ্ধ করে A potentially dangerous Request.Path value was detected from the client
শিখছি

510

আমি বিভিন্ন পদ্ধতি নিয়ে পরীক্ষা করে যাচ্ছি। ইউআরএল এনকোডিংয়ের জন্য নেট সরবরাহ করে। সম্ভবত নিম্নলিখিত সারণিটি কার্যকর হবে (আমি যে পরীক্ষামূলক অ্যাপ্লিকেশন থেকে লিখেছি তা আউটপুট হিসাবে):

Unencoded UrlEncoded UrlEncodedUnicode UrlPathEncoded EscapedDataString EscapedUriString HtmlEncoded HtmlAttributeEncoded HexEscaped
A         A          A                 A              A                 A                A           A                    %41
B         B          B                 B              B                 B                B           B                    %42

a         a          a                 a              a                 a                a           a                    %61
b         b          b                 b              b                 b                b           b                    %62

0         0          0                 0              0                 0                0           0                    %30
1         1          1                 1              1                 1                1           1                    %31

[space]   +          +                 %20            %20               %20              [space]     [space]              %20
!         !          !                 !              !                 !                !           !                    %21
"         %22        %22               "              %22               %22              "      "               %22
#         %23        %23               #              %23               #                #           #                    %23
$         %24        %24               $              %24               $                $           $                    %24
%         %25        %25               %              %25               %25              %           %                    %25
&         %26        %26               &              %26               &                &       &                %26
'         %27        %27               '              '                 '                '       '                %27
(         (          (                 (              (                 (                (           (                    %28
)         )          )                 )              )                 )                )           )                    %29
*         *          *                 *              %2A               *                *           *                    %2A
+         %2b        %2b               +              %2B               +                +           +                    %2B
,         %2c        %2c               ,              %2C               ,                ,           ,                    %2C
-         -          -                 -              -                 -                -           -                    %2D
.         .          .                 .              .                 .                .           .                    %2E
/         %2f        %2f               /              %2F               /                /           /                    %2F
:         %3a        %3a               :              %3A               :                :           :                    %3A
;         %3b        %3b               ;              %3B               ;                ;           ;                    %3B
<         %3c        %3c               <              %3C               %3C              &lt;        &lt;                 %3C
=         %3d        %3d               =              %3D               =                =           =                    %3D
>         %3e        %3e               >              %3E               %3E              &gt;        >                    %3E
?         %3f        %3f               ?              %3F               ?                ?           ?                    %3F
@         %40        %40               @              %40               @                @           @                    %40
[         %5b        %5b               [              %5B               %5B              [           [                    %5B
\         %5c        %5c               \              %5C               %5C              \           \                    %5C
]         %5d        %5d               ]              %5D               %5D              ]           ]                    %5D
^         %5e        %5e               ^              %5E               %5E              ^           ^                    %5E
_         _          _                 _              _                 _                _           _                    %5F
`         %60        %60               `              %60               %60              `           `                    %60
{         %7b        %7b               {              %7B               %7B              {           {                    %7B
|         %7c        %7c               |              %7C               %7C              |           |                    %7C
}         %7d        %7d               }              %7D               %7D              }           }                    %7D
~         %7e        %7e               ~              ~                 ~                ~           ~                    %7E

Ā         %c4%80     %u0100            %c4%80         %C4%80            %C4%80           Ā           Ā                    [OoR]
ā         %c4%81     %u0101            %c4%81         %C4%81            %C4%81           ā           ā                    [OoR]
Ē         %c4%92     %u0112            %c4%92         %C4%92            %C4%92           Ē           Ē                    [OoR]
ē         %c4%93     %u0113            %c4%93         %C4%93            %C4%93           ē           ē                    [OoR]
Ī         %c4%aa     %u012a            %c4%aa         %C4%AA            %C4%AA           Ī           Ī                    [OoR]
ī         %c4%ab     %u012b            %c4%ab         %C4%AB            %C4%AB           ī           ī                    [OoR]
Ō         %c5%8c     %u014c            %c5%8c         %C5%8C            %C5%8C           Ō           Ō                    [OoR]
ō         %c5%8d     %u014d            %c5%8d         %C5%8D            %C5%8D           ō           ō                    [OoR]
Ū         %c5%aa     %u016a            %c5%aa         %C5%AA            %C5%AA           Ū           Ū                    [OoR]
ū         %c5%ab     %u016b            %c5%ab         %C5%AB            %C5%AB           ū           ū                    [OoR]

কলামগুলি নীচে এনকোডিংগুলি উপস্থাপন করে:

  • UrlEncoded: HttpUtility.UrlEncode

  • UrlEncodedUnicode: HttpUtility.UrlEncodeUnicode

  • UrlPathEncoded: HttpUtility.UrlPathEncode

  • EscapedDataString: Uri.EscapeDataString

  • EscapedUriString: Uri.EscapeUriString

  • HtmlEncoded: HttpUtility.HtmlEncode

  • HtmlAttributeEncoded: HttpUtility.HtmlAttributeEncode

  • HexEscaped: Uri.HexEscape

মন্তব্য:

  1. HexEscapeশুধুমাত্র প্রথম 255 টি অক্ষর পরিচালনা করতে পারে। সুতরাং এটি ArgumentOutOfRangeল্যাটিন এ-বর্ধিত অক্ষরের (যেমন Ā) ব্যতিক্রম ছুঁড়ে ।

  2. এই টেবিলটি .NET 4.0 এ তৈরি করা হয়েছিল (নীচে লেভি বোটেলহোর মন্তব্য দেখুন যে .NET 4.5 এ এনকোডিংটি কিছুটা আলাদা)।

সম্পাদনা করুন:

.NET 4.5 এর জন্য এনকোডিং সহ আমি একটি দ্বিতীয় সারণী যুক্ত করেছি। এই উত্তরটি দেখুন: https://stackoverflow.com/a/21771206/216440

সম্পাদনা 2:

যেহেতু লোকেরা এই টেবিলগুলিকে প্রশংসা করে বলে মনে হচ্ছে, আমি ভেবেছিলাম আপনি টেবিলটি উত্স উত্স উত্স কোড পছন্দ করতে পারেন, তাই আপনি নিজের চারপাশে খেলতে পারেন। এটি একটি সাধারণ সি # কনসোল অ্যাপ্লিকেশন, যা। নেট 4.0 বা 4.5 ব্যবহার করতে পারে:

using System;
using System.Collections.Generic;
using System.Text;
// Need to add a Reference to the System.Web assembly.
using System.Web;

namespace UriEncodingDEMO2
{
    class Program
    {
        static void Main(string[] args)
        {
            EncodeStrings();

            Console.WriteLine();
            Console.WriteLine("Press any key to continue...");
            Console.Read();
        }

        public static void EncodeStrings()
        {
            string stringToEncode = "ABCD" + "abcd"
            + "0123" + " !\"#$%&'()*+,-./:;<=>?@[\\]^_`{|}~" + "ĀāĒēĪīŌōŪū";

            // Need to set the console encoding to display non-ASCII characters correctly (eg the 
            //  Latin A-Extended characters such as ĀāĒē...).
            Console.OutputEncoding = Encoding.UTF8;

            // Will also need to set the console font (in the console Properties dialog) to a font 
            //  that displays the extended character set correctly.
            // The following fonts all display the extended characters correctly:
            //  Consolas
            //  DejaVu Sana Mono
            //  Lucida Console

            // Also, in the console Properties, set the Screen Buffer Size and the Window Size 
            //  Width properties to at least 140 characters, to display the full width of the 
            //  table that is generated.

            Dictionary<string, Func<string, string>> columnDetails =
                new Dictionary<string, Func<string, string>>();
            columnDetails.Add("Unencoded", (unencodedString => unencodedString));
            columnDetails.Add("UrlEncoded",
                (unencodedString => HttpUtility.UrlEncode(unencodedString)));
            columnDetails.Add("UrlEncodedUnicode",
                (unencodedString => HttpUtility.UrlEncodeUnicode(unencodedString)));
            columnDetails.Add("UrlPathEncoded",
                (unencodedString => HttpUtility.UrlPathEncode(unencodedString)));
            columnDetails.Add("EscapedDataString",
                (unencodedString => Uri.EscapeDataString(unencodedString)));
            columnDetails.Add("EscapedUriString",
                (unencodedString => Uri.EscapeUriString(unencodedString)));
            columnDetails.Add("HtmlEncoded",
                (unencodedString => HttpUtility.HtmlEncode(unencodedString)));
            columnDetails.Add("HtmlAttributeEncoded",
                (unencodedString => HttpUtility.HtmlAttributeEncode(unencodedString)));
            columnDetails.Add("HexEscaped",
                (unencodedString
                    =>
                    {
                        // Uri.HexEscape can only handle the first 255 characters so for the 
                        //  Latin A-Extended characters, such as A, it will throw an 
                        //  ArgumentOutOfRange exception.                       
                        try
                        {
                            return Uri.HexEscape(unencodedString.ToCharArray()[0]);
                        }
                        catch
                        {
                            return "[OoR]";
                        }
                    }));

            char[] charactersToEncode = stringToEncode.ToCharArray();
            string[] stringCharactersToEncode = Array.ConvertAll<char, string>(charactersToEncode,
                (character => character.ToString()));
            DisplayCharacterTable<string>(stringCharactersToEncode, columnDetails);
        }

        private static void DisplayCharacterTable<TUnencoded>(TUnencoded[] unencodedArray,
            Dictionary<string, Func<TUnencoded, string>> mappings)
        {
            foreach (string key in mappings.Keys)
            {
                Console.Write(key.Replace(" ", "[space]") + " ");
            }
            Console.WriteLine();

            foreach (TUnencoded unencodedObject in unencodedArray)
            {
                string stringCharToEncode = unencodedObject.ToString();
                foreach (string columnHeader in mappings.Keys)
                {
                    int columnWidth = columnHeader.Length + 1;
                    Func<TUnencoded, string> encoder = mappings[columnHeader];
                    string encodedString = encoder(unencodedObject);

                    // ASSUMPTION: Column header will always be wider than encoded string.
                    Console.Write(encodedString.Replace(" ", "[space]").PadRight(columnWidth));
                }
                Console.WriteLine();
            }
        }
    }
}

2
এটি একটি দুর্দান্ত উত্তর। দেখা যাচ্ছে যে আমি ইউরি.স্ক্রপ ডেটা স্ট্রিং ব্যবহার করতে চেয়েছিলাম এবং সিস্টেম.ওয়েবকে অন্তর্ভুক্ত না করে। এই টেবিলের জন্য ধন্যবাদ।
Seravy

7
মনে রাখবেন যে এটি আর 100% নির্ভুল নয়। নেট 4 এবং নেট নেট 4.5 এর মধ্যে কিছু ফাংশন সামান্য পরিবর্তিত হয়েছে changed স্ট্যাকওভারফ্লো . com/q/20003106/1068266 দেখুন ।
লেভি বোটেলহো

2
@ লেভি: মাথা উঁচু করার জন্য ধন্যবাদ .NET 4.5 এর জন্য আমি টেবিলের সাথে একটি দ্বিতীয় উত্তর যুক্ত করেছি। আমি দ্বিতীয় টেবিলের সাথে লিঙ্ক করতে মূল উত্তরটি সম্পাদনা করেছি।
সাইমন তেউসি

উল্লেখ্য যে .NET ডকুমেন্টেশন বলে যে ব্যবহার করবেন না; শুধুমাত্র ব্রাউজারের সামঞ্জস্যের জন্য উদ্দিষ্ট। UrlEncode ব্যবহার করুন। , কিন্তু সেই পদ্ধতিটি অনেক অন্যান্য অনাকাঙ্ক্ষিত অক্ষরকে এনকোড করে। নিকটতমটি হ'ল Uri.EscapeUriStringতবে সাবধান থাকুন এটি কোনও nullযুক্তি সমর্থন করে না ।
অ্যান্ড্রু

1
আমি উল্লেখ করতে ভুলে গেছি, উপরের আমার মন্তব্যটি এর জন্য UrlPathEncode। সুতরাং মূলত UrlPathEncodeসঙ্গে প্রতিস্থাপন Uri.EscapeUriString
অ্যান্ড্রু

278

আপনার কেবল ব্যবহারকারীর নাম বা ইউআরএল এর অন্য অংশ যা এনক্রোড হতে পারে enc ইউআরএলকে এনকোডিং করা URL এমন সমস্যার কারণ হতে পারে:

string url = HttpUtility.UrlEncode("http://www.google.com/search?q=Example");

ফলন হবে

HTTP% 3A% 2F% 2fwww.google.com% 2fsearch% 3fq% 3dExample

এটি সম্ভবত ভাল কাজ করবে না। পরিবর্তে, আপনার কাছে ক্যোরি স্ট্রিং-এ কেবল কী / মান জোড়ার মান এনকোড করা উচিত:

string url = "http://www.google.com/search?q=" + HttpUtility.UrlEncode("Example");

আশা করি এটি সাহায্য করবে। এছাড়াও, তেদায়ী হিসাবে উল্লেখ করা হয়েছে, আপনার এখনও অবৈধ ফাইল-নামের অক্ষর মুছে ফেলা হয়েছে তা নিশ্চিত করতে হবে অন্যথায় ফাইল সিস্টেমটি পথটি পছন্দ করবে না।


33
এইচটিটিপি ইউটিলিটি.আরলপথ এনকোড পদ্ধতিটি ব্যবহার করার ফলে আপনি এখানে যে সমস্যার বর্ণনা দিচ্ছেন তা প্রতিরোধ করা উচিত।
ভিপীর্তি

12
@ ডিজে পির্তু: এটি সত্য যে উরলপথএনকোড পথে এই অনাকাঙ্ক্ষিত পরিবর্তনগুলি আনবে না, তবে এটির পরে কোনও কিছুই এনকোড করা হবে না ?(যেহেতু এটি অনুমান করে যে কোয়েরি স্ট্রিং ইতিমধ্যে এনকোডড রয়েছে)) ড্যান হারবার্টের উদাহরণে দেখে মনে হচ্ছে তিনি ভান করছেন Exampleএমন পাঠ্য যা এনকোডিং দরকার, সুতরাং HttpUtility.UrlPathEncode("http://www.google.com/search?q=Example");কাজ করবে না। এটি দিয়ে চেষ্টা করুন ?q=Ex&ple(যেখানে পছন্দসই ফলাফল রয়েছে ?q=Ex%26ple)। এটি কাজ করবে না কারণ (1) UrlPathEncode এর পরে কোনও কিছুই স্পর্শ করে না ?এবং (2) আরলপথএনকোড &যাইহোক এনকোড করে না।
টিম গুডম্যান

1
এখানে দেখুন: connect.microsoft.com/VisualStudio/feedback/details/551839/... আমি যে অবশ্যই এটা ভালো যে UrlPathEncode সঙ্কেতাক্ষরে লিখা নেই যোগ করা উচিত &, কারণ আপনি যে প্রয়োজন আপনার কোয়েরি স্ট্রিং পরামিতি সীমানা রয়েছে। তবে এমন সময় রয়েছে যখন আপনি এনকোডযুক্ত এম্পারস্যান্ডগুলিও চান।
টিম গুডম্যান

10
এইচটিপি ইউটিলিটি সর্বশেষ সংস্করণগুলিতে ওয়েব ইউটিলিটি দ্বারা সাফল্য পেয়েছে, নিজেকে কিছুটা সময় সাশ্রয় করুন :)
বুদ্ধিমান

190

ভাল উপায় ব্যবহার করা হয়

Uri.EscapeUriString

.NET 4 এর সম্পূর্ণ প্রোফাইল রেফারেন্স না।


1
সম্পূর্ণরূপে সম্মত হ'ল প্রায়শই "ক্লায়েন্ট প্রোফাইল" অ্যাপ্লিকেশনগুলিতে সিস্টেম. নেট ব্যবহার করে তবে সিস্টেম.ওয়েব ব্যবহার করে না ;-)
hfrmobile

6
ওপি ফাইল সিস্টেমের সামঞ্জস্যতার জন্য এটি পরীক্ষা করার কথা বলছে, সুতরাং এটি কাজ করবে না। উইন্ডোজ নিষ্ক্রিয় অক্ষর সেট '["/", "\\", "<", ">", ":", "\" "," | ","? "," * "]' তবে এর মধ্যে অনেকগুলি এসকেপেডউরিস্ট্রিং ব্যবহার করে এনকোড পাবেন না (নীচের টেবিলটি দেখুন - সেই সারণীটির জন্য ধন্যবাদ @ সিমন তেউসি) ... "তাদের স্থানীয় মেশিনে একটি পথ তৈরি করে" -অপ ইউরেলকোড্ড প্রায় সমস্ত সমস্যার যত্ন নেয়, তবে সমাধান করে না "%" বা "% 3f" আসল
ইনপুটটিতে থাকা

6
কেবল এটি পরিষ্কার করার জন্য: ফাইল সিস্টেমের জন্য এই উত্তরটি ব্যবহার করুন
এম

1
এছাড়াও, .NET ফ্রেমওয়ার্ক 4.5 দিয়ে শুরু করে, ক্লায়েন্ট প্রোফাইল বন্ধ করা হয়েছে এবং কেবলমাত্র সম্পূর্ণ পুনরায় বিতরণযোগ্য প্যাকেজ উপলব্ধ।
twomm

29
stackoverflow.com/a/34189188/3436164 ব্যবহারের Uri.EscapeDataStringনয় Uri.EscapeUriStringপড়ুন এই মন্তব্যটি, এটা আমাকে বের করেছে।
ইয়াকাদারু

181

যেহেতু .NET ফ্রেমওয়ার্ক 4.5 এবং .NET স্ট্যান্ডার্ড 1.0 আপনি ব্যবহার করা উচিত WebUtility.UrlEncode। বিকল্পগুলির তুলনায় সুবিধা:

  1. এটি। নেট ফ্রেমওয়ার্ক 4.5+,। নেট কোর 1.0++। নেট স্ট্যান্ডার্ড 1.0+, ইউডাব্লুপি 10.0+ এবং সমস্ত জ্যামারিন প্ল্যাটফর্মের অংশ। HttpUtility.NET ফ্রেমওয়ার্ক এর আগে (। নেট ফ্রেমওয়ার্ক 1.1+) এ উপলব্ধ থাকাকালীন অন্যান্য প্ল্যাটফর্মগুলিতে অনেক পরে পাওয়া যায় (। নেট কোর ২.০+,। নেট স্ট্যান্ডার্ড ২.০+) এবং এটি ইউডাব্লুপিতে এখনও উপলভ্য নয় ( সম্পর্কিত প্রশ্ন দেখুন )।

  2. .NET ফ্রেমওয়ার্কে এটি বাস করেSystem.dll , সুতরাং এটির বিপরীতে কোনও অতিরিক্ত রেফারেন্সের প্রয়োজন হয় না HttpUtility

  3. এটি ইউআরএলগুলির জন্য অক্ষরগুলি যথাযথভাবে পালিয়ে যায়Uri.EscapeUriString ( ভিন্ন মতামত drweb86 এর উত্তর দেখুন )।

  4. এটা তোলে স্ট্রিং দৈর্ঘ্যের উপর কোন সীমা নেই , অসদৃশ Uri.EscapeDataString(দেখুন সংশ্লিষ্ট প্রশ্ন তাই এটি, পোস্ট অনুরোধের জন্য ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ,)।


আমি স্পেসগুলির জন্য% 20 এর পরিবর্তে "+" ব্যবহার করে এনকোড করার পদ্ধতিটি পছন্দ করি .. তবে এটি এখনও ইউআরএল থেকে "সরান না এবং আমাকে অবৈধ ইউআরএল দেয় ... ওহ ভাল .. শুধু এএ প্রতিস্থাপন করতে হবে (" "" "", "")
পাইটর কুলা

84

লেবি বোটেলহো মন্তব্য করেছিলেন যে পূর্বে তৈরি এনকোডিংগুলির সারণীটি নেট নেট ৪.৫ এর জন্য আর সঠিক নয়, এনকোডিংগুলি নেট নেট থেকে and.৪ এবং 4.5 এর মধ্যে কিছুটা পরিবর্তিত হয়েছে। সুতরাং আমি .NET 4.5 এর জন্য টেবিলটি পুনরায় জেনারেট করেছি:

Unencoded UrlEncoded UrlEncodedUnicode UrlPathEncoded WebUtilityUrlEncoded EscapedDataString EscapedUriString HtmlEncoded HtmlAttributeEncoded WebUtilityHtmlEncoded HexEscaped
A         A          A                 A              A                    A                 A                A           A                    A                     %41
B         B          B                 B              B                    B                 B                B           B                    B                     %42

a         a          a                 a              a                    a                 a                a           a                    a                     %61
b         b          b                 b              b                    b                 b                b           b                    b                     %62

0         0          0                 0              0                    0                 0                0           0                    0                     %30
1         1          1                 1              1                    1                 1                1           1                    1                     %31

[space]   +          +                 %20            +                    %20               %20              [space]     [space]              [space]               %20
!         !          !                 !              !                    %21               !                !           !                    !                     %21
"         %22        %22               "              %22                  %22               %22              &quot;      &quot;               &quot;                %22
#         %23        %23               #              %23                  %23               #                #           #                    #                     %23
$         %24        %24               $              %24                  %24               $                $           $                    $                     %24
%         %25        %25               %              %25                  %25               %25              %           %                    %                     %25
&         %26        %26               &              %26                  %26               &                &amp;       &amp;                &amp;                 %26
'         %27        %27               '              %27                  %27               '                &#39;       &#39;                &#39;                 %27
(         (          (                 (              (                    %28               (                (           (                    (                     %28
)         )          )                 )              )                    %29               )                )           )                    )                     %29
*         *          *                 *              *                    %2A               *                *           *                    *                     %2A
+         %2b        %2b               +              %2B                  %2B               +                +           +                    +                     %2B
,         %2c        %2c               ,              %2C                  %2C               ,                ,           ,                    ,                     %2C
-         -          -                 -              -                    -                 -                -           -                    -                     %2D
.         .          .                 .              .                    .                 .                .           .                    .                     %2E
/         %2f        %2f               /              %2F                  %2F               /                /           /                    /                     %2F
:         %3a        %3a               :              %3A                  %3A               :                :           :                    :                     %3A
;         %3b        %3b               ;              %3B                  %3B               ;                ;           ;                    ;                     %3B
<         %3c        %3c               <              %3C                  %3C               %3C              &lt;        &lt;                 &lt;                  %3C
=         %3d        %3d               =              %3D                  %3D               =                =           =                    =                     %3D
>         %3e        %3e               >              %3E                  %3E               %3E              &gt;        >                    &gt;                  %3E
?         %3f        %3f               ?              %3F                  %3F               ?                ?           ?                    ?                     %3F
@         %40        %40               @              %40                  %40               @                @           @                    @                     %40
[         %5b        %5b               [              %5B                  %5B               [                [           [                    [                     %5B
\         %5c        %5c               \              %5C                  %5C               %5C              \           \                    \                     %5C
]         %5d        %5d               ]              %5D                  %5D               ]                ]           ]                    ]                     %5D
^         %5e        %5e               ^              %5E                  %5E               %5E              ^           ^                    ^                     %5E
_         _          _                 _              _                    _                 _                _           _                    _                     %5F
`         %60        %60               `              %60                  %60               %60              `           `                    `                     %60
{         %7b        %7b               {              %7B                  %7B               %7B              {           {                    {                     %7B
|         %7c        %7c               |              %7C                  %7C               %7C              |           |                    |                     %7C
}         %7d        %7d               }              %7D                  %7D               %7D              }           }                    }                     %7D
~         %7e        %7e               ~              %7E                  ~                 ~                ~           ~                    ~                     %7E

Ā         %c4%80     %u0100            %c4%80         %C4%80               %C4%80            %C4%80           Ā           Ā                    Ā                     [OoR]
ā         %c4%81     %u0101            %c4%81         %C4%81               %C4%81            %C4%81           ā           ā                    ā                     [OoR]
Ē         %c4%92     %u0112            %c4%92         %C4%92               %C4%92            %C4%92           Ē           Ē                    Ē                     [OoR]
ē         %c4%93     %u0113            %c4%93         %C4%93               %C4%93            %C4%93           ē           ē                    ē                     [OoR]
Ī         %c4%aa     %u012a            %c4%aa         %C4%AA               %C4%AA            %C4%AA           Ī           Ī                    Ī                     [OoR]
ī         %c4%ab     %u012b            %c4%ab         %C4%AB               %C4%AB            %C4%AB           ī           ī                    ī                     [OoR]
Ō         %c5%8c     %u014c            %c5%8c         %C5%8C               %C5%8C            %C5%8C           Ō           Ō                    Ō                     [OoR]
ō         %c5%8d     %u014d            %c5%8d         %C5%8D               %C5%8D            %C5%8D           ō           ō                    ō                     [OoR]
Ū         %c5%aa     %u016a            %c5%aa         %C5%AA               %C5%AA            %C5%AA           Ū           Ū                    Ū                     [OoR]
ū         %c5%ab     %u016b            %c5%ab         %C5%AB               %C5%AB            %C5%AB           ū           ū                    ū                     [OoR]

কলামগুলি নীচে এনকোডিংগুলি উপস্থাপন করে:

  • UrlEncoded: HttpUtility.UrlEncode
  • UrlEncodedUnicode: HttpUtility.UrlEncodeUnicode
  • UrlPathEncoded: HttpUtility.UrlPathEncode
  • WebUtilityUrlEncoded: WebUtility.UrlEncode
  • EscapedDataString: Uri.EscapeDataString
  • EscapedUriString: Uri.EscapeUriString
  • HtmlEncoded: HttpUtility.HtmlEncode
  • HtmlAttributeEncoded: HttpUtility.HtmlAttributeEncode
  • WebUtilityHtmlEncoded: WebUtility.HtmlEncode
  • HexEscaped: Uri.HexEscape

মন্তব্য:

  1. HexEcreen কেবল প্রথম 255 টি অক্ষর পরিচালনা করতে পারে। অতএব এটি ল্যাটিন এ-বর্ধিত অক্ষরের (যেমন Ā) জন্য একটি আর্গুমেন্টআউটআফরেঞ্জ ব্যতিক্রম ছুঁড়ে।

  2. এই টেবিলটি .NET 4.5 এ উত্পন্ন হয়েছিল ( .NET 4.0 এবং নীচে সম্পর্কিত এনকোডিংগুলির জন্য উত্তর https://stackoverflow.com/a/11236038/216440 দেখুন)।

সম্পাদনা করুন:

  1. ডিসকর্ডের উত্তরের ফলস্বরূপ আমি নতুন ওয়েব ইউটিলিটি আরলএনকোড এবং এইচটিএমএল এনকোড পদ্ধতি যুক্ত করেছি, যা .NET 4.5 তে প্রবর্তিত হয়েছিল।

2
কোনও ব্যবহারকারী নয় urlPathEncode - এমনকি এমএসডিএন বলে যে এটি ব্যবহার করা হবে না। এটি নেটস্কেপ
জেফ

সার্ভার.উরলঙ্কোড এই থিমটিতে আরও একটি ভিন্নতা রয়েছে? এটি কি কোনও আলাদা আউটপুট উত্পন্ন করে?
এলেএক্সিন্টলসোস

2
@ অ্যালেক্স: এএসপি.নেটে সার্ভার অবজেক্টটি এইচটিপিএস সার্ভার ইউটিলিটির একটি উদাহরণ। ডটপিক ডিকম্পিলার ব্যবহার করে আমার এইচটিপিএসবার সার্ভারটিউটি.আরলইনকোডটি ছিল। এটি কেবল এইচটিটিপিটিবিলিটি বলে lআরলিএনকোড তাই দুটি পদ্ধতির আউটপুট অভিন্ন হবে।
সাইমন তেউসি

দেখে মনে হচ্ছে, এমনকি এনকোডিং পদ্ধতির এই অত্যধিক পরিমাণে, তারা এখনও ল্যাটিন -1 এর উপরে anything বা ☠ এর মতো কোনও কিছুর জন্য দর্শনীয়ভাবে ব্যর্থ ☠ (UrlCodedUnicode দেখে মনে হচ্ছে এটি কমপক্ষে ইউনিকোডকে সমর্থন করার চেষ্টা করে তবে অবচিত / নিখোঁজ))
ব্রায়ানারি

সাইমন, আপনি কি এই উত্তরটিকে গৃহীত উত্তরে সংহত করতে পারবেন? এটি একটি উত্তর পেয়ে ভাল লাগবে। আপনি এটি সংহত করতে পারেন এবং এই উত্তরের নীচে একটি এইচ 1 শিরোনাম তৈরি করতে পারেন, বা একটি সারণীতে একীকরণ করতে এবং বিভিন্ন লাইন চিহ্নিত করেছেন, যেমন: (Net4.0) ? %3f................................ (Net4.5) ? %3f ..................................
টি.ডি.ডোডিয়া

60

নেট থেকে ইউআরএল এনকোডিং সহজ। ব্যবহার করুন:

System.Web.HttpUtility.UrlEncode(string url)

যদি সেটি ফোল্ডারের নাম পাওয়ার জন্য ডিকোড করা হয়ে থাকে তবে আপনাকে এখনও এমন অক্ষরগুলি বাদ দিতে হবে যা ফোল্ডারের নামগুলিতে ব্যবহার করা যায় না (*,?, /, ইত্যাদি)


এটি কি প্রতিটি অক্ষরকে বর্ণমালার অংশ না করে এনকোড করে?
masfenix

1
ইউআরএল এনকোডিং এমন অক্ষরকে রূপান্তর করে যা URL এ অক্ষর-সত্তা সমতুল্য হয়ে যায়। অনিরাপদ চরিত্রগুলির তালিকা: ব্লুব্রোরি.com
ইয়ান রবিনসন

HttpUtility.UrlEncode উপর দুটিই MSDN লিঙ্ক: msdn.microsoft.com/en-us/library/4fkewx0t.aspx
ইয়ান রবিনসন

11
আপনার উত্তরে সম্পূর্ণ সিস্টেম.ওয়েব ... অংশটি রাখা ভাল অনুশীলন, এতে অনেক লোকের অল্প সময় সাশ্রয় হয় :) ধন্যবাদ
লিয়াম

3
এটি বিপজ্জনক: ইউআরএলের সমস্ত চরিত্রকে এনকোড করতে হবে না, কেবল ক্যোরিস্ট্রিংয়ের প্যারামিটারের মান। আপনি যেভাবে পরামর্শ দিয়েছেন সেটিও এনকোড করবে এবং যেগুলি ক্যোরিস্ট্রিংয়ে একাধিক প্যারামিটার তৈরি করতে হবে। প্রয়োজনে প্যারামিটারগুলির প্রতিটি মান এনকোড করা
হ'ল

12

আপনি যদি System.Web দেখতে না পান তবে আপনার প্রকল্পের সেটিংস পরিবর্তন করুন। লক্ষ্য ফ্রেমওয়ার্কটি "। নেট ফ্রেমওয়ার্ক 4 ক্লায়েন্ট প্রোফাইল" এর পরিবর্তে "। নেট ফ্রেমওয়ার্ক 4" হওয়া উচিত


1
আমার মতে বিকাশকারীদের ".NET প্রোফাইল" সম্পর্কে জানা উচিত এবং তাদের তাদের উদ্দেশ্যগুলির জন্য সঠিকটি ব্যবহার করা উচিত ! তারা কেন সম্পূর্ণ প্রোফাইল যুক্ত করে তা সত্যিই না জেনে (উদাহরণস্বরূপ System.Web) পেতে সম্পূর্ণ প্রোফাইল যুক্ত করা খুব স্মার্ট নয়। আপনার ক্লায়েন্ট অ্যাপ্লিকেশন এবং সম্পূর্ণ প্রোফাইলের জন্য "ক্লায়েন্ট প্রোফাইল" ব্যবহার করুন কেবলমাত্র যখন প্রয়োজন হয় (যেমন উইনফর্মস বা ডাব্লুপিএফ ক্লায়েন্টের ক্লায়েন্ট প্রোফাইল ব্যবহার করা উচিত এবং সম্পূর্ণ প্রোফাইল নয়)! উদাহরণস্বরূপ, আমি ক্লায়েন্ট অ্যাপ্লিকেশনটিতে এইচটিপিএস সার্ভার ইউটিলিটি ব্যবহার করার কোনও কারণ দেখছি না ^^ ... এটির যদি প্রয়োজন হয় তবে অ্যাপটির নকশায় কিছু ভুল আছে!
এইচএফআরমোবাইল

4
সত্যি? কোনও ইউআরএল তৈরির জন্য কোনও ক্লায়েন্ট অ্যাপ্লিকেশনটির প্রয়োজন দেখেন না? জীবনযাত্রার দায়িত্বে দায়িত্ব পালনের জন্য আপনি কী করেন?
sproketboy

@hfrmobile: না প্রোফাইল মডেলটি (যা কেবল একবারেই বেঁচে ছিল এবং পরবর্তী সংস্করণে ত্যাগ করা হয়েছিল) এর সাথে এটি সমস্ত ভুল। এবং এটি প্রথম থেকেই স্পষ্ট ছিল। এটা কি এখন আপনার পক্ষে সুস্পষ্ট? প্রথমে চিন্তা করুন,
এমএসএফটি

দুঃখিত, তবে আমি কখনও বলিনি যে কোনও ক্লায়েন্টকে কখনও ইউআরএল তৈরি / ব্যবহার করতে হয় না। যতক্ষণ না নেট নেট use.০ ব্যবহার করা হয় ততক্ষণ ব্যবহারকারীর এটির যত্ন নেওয়া উচিত। এটি সংক্ষেপে বলতে: কোনও ক্লায়েন্টে এইচটিপিএস সার্ভার ইউটিলিটি যুক্ত করার আগে বিকাশকারীদের দু'বার চিন্তা করা উচিত। অন্যান্য / আরও ভাল উপায় রয়েছে, কেবল ১৩৯ টি ভোট দিয়ে উত্তর দেখুন বা "যেহেতু। নেট ফ্রেমওয়ার্ক ৪.৫ আপনি ওয়েব ইউটিলিটি.উরলিনকোড ব্যবহার করতে পারেন First প্রথমত, এটি System.dll এ থাকে, সুতরাং এটির জন্য কোনও অতিরিক্ত রেফারেন্সের প্রয়োজন হয় না।"
hfrmobile

9

.NET বাস্তবায়ন UrlEncodeআরএফসি 3986 এর সাথে সম্মতি দেয় না।

  1. কিছু অক্ষর এনকোড করা হয়নি তবে হওয়া উচিত। !()*অক্ষর একটি সংরক্ষিত অক্ষর আছে যা এনকোড করা আবশ্যক এখনো .NET এই অক্ষরগুলি এনকোড করতে ব্যর্থ জন্য RFC এর অধ্যায় 2.2 তালিকাভুক্ত করা হয়।

  2. কিছু অক্ষর এনকোড হয়েছে তবে হওয়া উচিত নয়। .-_অক্ষর একটি সংরক্ষিত চরিত্র যা এখনও .NET ভুল এনকোড করা উচিত নয় এই অক্ষরগুলি এনকোড জন্য RFC এর অধ্যায় 2.2 তালিকাভুক্ত করা হয় না।

  3. আরএফসি উল্লেখ করে যে সামঞ্জস্যপূর্ণ হতে, বাস্তবায়নের ক্ষেত্রে উচ্চতর ক্ষেত্রে HEXDIG ব্যবহার করা উচিত, যেখানে .NET লোয়ার-কেস হেক্সডিজ উত্পাদন করে।


4

আমি মনে করি এখানকার লোকেরা ইউরেলকোড বার্তাটি দ্বারা বিভক্ত হয়ে পড়েছে। ইউআরএলএনকোডিং নয় আপনি যা চান তা - আপনি টার্গেট সিস্টেমে ফাইল নাম হিসাবে কাজ করবে না এমন এনকোড করতে চান।

ধরে নিই যে আপনি কিছু সাধারণতা চান - বেশ কয়েকটি সিস্টেমে অবৈধ অক্ষর (ম্যাকোস, উইন্ডোজ, লিনাক্স এবং ইউনিক্স) নির্দ্বিধায় ফেলুন, পালানোর জন্য অক্ষরগুলির একটি সেট তৈরি করতে তাদের একত্র করুন।

অব্যাহতি হিসাবে, একটি হেক্সস্কেপ ঠিক করা উচিত (% XX এর সাথে অক্ষরগুলি প্রতিস্থাপন করা)। প্রতিটি অক্ষরকে ইউটিএফ -8 বাইটে রূপান্তর করুন এবং ইউনিকোড না করে এমন সিস্টেমগুলিকে সমর্থন করতে চান> 128 সবকিছু এনকোড করুন। তবে অন্যান্য উপায় রয়েছে যেমন "\" বা এইচটিএমএল এনকোডিং "" "এর পিছনে স্ল্যাশ ব্যবহার করে your আপনি নিজের তৈরি করতে পারেন any সমস্ত সিস্টেমের জন্য অসম্পূর্ণ অক্ষর দূরে 'এনকোড' করতে হবে above উপরের সিস্টেমগুলি আপনাকে পুনরায় তৈরি করার অনুমতি দেয় আসল নাম - তবে স্থানগুলি দিয়ে খারাপ বর্ণগুলি প্রতিস্থাপনের মতো কিছু কাজ করে also

উপরের মতো একই স্পর্শকালে, কেবলমাত্র ব্যবহারযোগ্য use

Uri.EscapeDataString

- এটি ওআউথের জন্য প্রয়োজনীয় সমস্ত কিছু এনকোড করে, এটি যে জিনিসগুলিকে OAuth এনকোডিং করতে নিষেধ করে তা এনকোড করে না এবং স্থানটি% 20 হিসাবে এনকোড করে না এবং (OATH বৈশিষ্ট্যেও) দেখুন: আরএফসি 3986 AF আফাইক, এটি সর্বশেষ ইউআরআই স্পেক।


3

আমি একটি সি # পদ্ধতি লিখেছি যা url- সমস্ত চিহ্নকে এনকোড করে:

    /// <summary>
    /// !#$345Hf} → %21%23%24%33%34%35%48%66%7D
    /// </summary>
    public static string UrlEncodeExtended( string value )
    {
        char[] chars = value.ToCharArray();
        StringBuilder encodedValue = new StringBuilder();
        foreach (char c in chars)
        {
            encodedValue.Append( "%" + ( (int)c ).ToString( "X2" ) );
        }
        return encodedValue.ToString();
    }

1

আদর্শভাবে এগুলি "ফাইল নামকরণ" নামে ক্লাসে যেতে পারে বা সম্ভবত এনকোডের নাম পরিবর্তন করে "ফাইলনামইনকোড" রাখে। দ্রষ্টব্য: এগুলি পুরো পাথগুলি হ্যান্ডেল করার জন্য ডিজাইন করা হয়নি, কেবল ফোল্ডার এবং / অথবা ফাইলের নাম। আদর্শভাবে আপনি প্রথমে আপনার পুরো পথটি বিভক্ত ("/") করে টুকরো টুকরো পরীক্ষা করতে পারেন। এবং সম্ভবত ইউনিয়নের পরিবর্তে, আপনি উইন্ডোজটিতে অনুমোদিত নয় এমন অক্ষরের তালিকায় কেবল "%" চরিত্রটি যুক্ত করতে পারেন, তবে আমি মনে করি এটি আরও সহায়ক / পঠনযোগ্য / সত্যবাদী। ডিকোড () হুবহু একই তবে চরিত্রটি সহ প্রতিস্থাপন (Uri.HexEPress (গুলি [0]), গুলি "পালানো" স্যুইচ করে।

public static List<string> urlEncodedCharacters = new List<string>
{
  "/", "\\", "<", ">", ":", "\"", "|", "?", "%" //and others, but not *
};
//Since this is a superset of urlEncodedCharacters, we won't be able to only use UrlEncode() - instead we'll use HexEncode
public static List<string> specialCharactersNotAllowedInWindows = new List<string>
{
  "/", "\\", "<", ">", ":", "\"", "|", "?", "*" //windows dissallowed character set
};

    public static string Encode(string fileName)
    {
        //CheckForFullPath(fileName); // optional: make sure it's not a path?
        List<string> charactersToChange = new List<string>(specialCharactersNotAllowedInWindows);
        charactersToChange.AddRange(urlEncodedCharacters.
            Where(x => !urlEncodedCharacters.Union(specialCharactersNotAllowedInWindows).Contains(x)));   // add any non duplicates (%)

        charactersToChange.ForEach(s => fileName = fileName.Replace(s, Uri.HexEscape(s[0])));   // "?" => "%3f"

        return fileName;
    }

উপরের খুব উপযোগী টেবিলের জন্য @ সাইমন-তেউসি ধন্যবাদ!


এছাড়াও Path.GetInvalidFileNameChars()
ব্যবহারযোগ্য

হ্যাঁ. এটি করার একটি উপায় এখানে রয়েছে: foreach (System.IO.Path.GetInuthorFileNameChars () তে চর সি) {filename = filename.Replace (c, '_'); }
নেটফিড

0

@ ড্যান হারবার্টের উত্তর ছাড়াও, আপনার আমাদের কেবলমাত্র মানগুলি সাধারণত এনকোড করা উচিত।

স্প্লিটের প্যারামিটার প্যারামিটার রয়েছে স্প্লিট ('&', '='); এক্সপ্রেশনটি প্রথমে & তারপর '=' দ্বারা বিভক্ত হয় তাই বিজোড় উপাদানগুলির নীচে এনকোড করা সমস্ত মান।

public static void EncodeQueryString(ref string queryString)
{
    var array=queryString.Split('&','=');
    for (int i = 0; i < array.Length; i++) {
        string part=array[i];
        if(i%2==1)
        {               
            part=System.Web.HttpUtility.UrlEncode(array[i]);
            queryString=queryString.Replace(array[i],part);
        }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.