سؤال

لدي تطبيق يرسل طلب وظيفة إلى برنامج منتدى VB وسجلات شخص ما في (دون إعداد ملفات تعريف الارتباط أو أي شيء).

بمجرد تسجيل دخول المستخدم في أقوم بإنشاء متغير يقوم بإنشاء مسار على جهازهم المحلي.

C: TempFolder Date اسم المستخدم

المشكلة هي أن بعض أسماء المستخدمين يرمون استثناء "الأحرف غير القانونية". على سبيل المثال إذا كان اسم المستخدم الخاص بي mas|fenix سوف رمي استثناء ..

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

لا أريد إزالته من السلسلة، ولكن يتم إنشاء مجلد مع اسم المستخدم الخاص بهم من خلال بروتوكول نقل الملفات على خادم. وهذا يؤدي إلى سؤالي الثاني. إذا قمت بإنشاء مجلد على الخادم، فهل يمكنني مغادرة "الأحرف غير القانونية" في؟ أنا فقط أسأل هذا فقط لأن الخادم يستند إلى Linux، وأنا لست متأكدا مما إذا كان Linux يقبله أم لا.

تحرير: يبدو أن ترميز URL ليس ما أريد .. إليك ما أريد القيام به:

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

حيث٪ xx هي قيمة ASCII أو أي قيمة أخرى من شأنها تحديد الحرف بسهولة.

هل كانت مفيدة؟

المحلول

تحرير: لاحظ أن هذه الإجابة قديمة الآن. يرى إجابة SIARHEI KUCHUK أدناه للحصول على إصلاح أفضل

سوف urlencoding تفعل ما تقترح هنا. مع C #، أنت فقط تستخدم HttpUtility, ، كما ذكر.

يمكنك أيضا إعادة تثبيت الأحرف غير القانونية ثم استبدالها، لكن هذا يحصل على أكثر تعقيدا بكثير، كما يجب أن يكون لديك بعض أشكال آلة الحالة (رمز التبديل ... على سبيل المثال) لاستبدال الأحرف الصحيحة. حيث UrlEncode هل هذه مقدمة، إنها سهلة إلى حد ما.

أما بالنسبة لنظام التشغيل Linux مقابل Windows، فهناك بعض الأحرف المقبولة في Linux غير الموجودة في Windows، لكنني لا تقلق بشأن ذلك، حيث يمكن إرجاع اسم المجلد عن طريق فك تشفير سلسلة URL، باستخدام UrlDecode, ، حتى تتمكن من رحلة جولة التغييرات.

نصائح أخرى

لقد قمت بتجربة الأساليب المختلفة .NET توفر لترميز URL. ربما سيكون الجدول التالي مفيدا (نظرا لأن الإخراج من تطبيق اختبار كتبته):

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

  • Escapedurredring: Uri.EscapeUriString

  • htmlencoded: HttpUtility.HtmlEncode

  • htmlattribodeNcoded: HttpUtility.HtmlAttributeEncode

  • مسدس: Uri.HexEscape

ملاحظات:

  1. HexEscape يمكن فقط التعامل مع أول 255 حرفا. لذلك يلقي ArgumentOutOfRange استثناء من الأحرف اللاتينية A-oled (مثل ā).

  2. تم إنشاء هذا الجدول في .NET 4.0 (انظر تعليق Levi Botelho أدناه الذي يقول إن الترميز في .NET 4.5 مختلفة قليلا).

تعديل:

لقد أضفت طاولة ثانية مع الترميزات ل .NET 4.5. انظر هذه الإجابة: https://stackoverflow.com/a/21771206/216440.

تحرير 2:

نظرا لأن الناس يقدرون أن يقدروا هذه الجداول، فقد اعتقدت أنك قد ترغب في رمز المصدر الذي ينشئ الجدول، حتى تتمكن من اللعب حول أنفسكم. إنه تطبيق C # بسيط C #، والذي يمكن أن يستهدف إما .NET 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();
            }
        }
    }
}

يجب أن ترميز اسم المستخدم فقط أو جزء آخر من عنوان URL الذي قد يكون غير صالح. يمكن أن يؤدي ترميز URL إلى عنوان 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");

نأمل أن يساعد. أيضا، وكذلك teedyay. المذكورة، ستظل بحاجة إلى التأكد من إزالة الأحرف غير القانونية لاسم الملفات أو غيرها نظام الملفات لن يحب المسار.

حيث .NET Framework 4.5. و .NET قياسي 1.0. يجب عليك استخدامها WebUtility.UrlEncode. وبعد مزايا على البدائل:

  1. إنه جزء من .NET Framework 4.5+ و .NET Core 1.0+ و .NET قياسي 1.0+ و UWP 10.0+ وجميع منصات Xamarin أيضا. HttpUtility, ، أثناء توفره في .NET Framework في وقت سابق (.NET Framework 1.1+)، يصبح متاحا على منصات أخرى لاحقا (.NET Core 2.0+، .NET Standard 2.0+) وما زال غير متاح في UWP (انظر سؤال ذي صلة).

  2. في .NET Framework، ذلك يقيم في System.dll, ، لذلك لا يتطلب أي مراجع إضافية، على عكس HttpUtility.

  3. هو - هي يهرب بشكل صحيح من الشخصيات لعناوين URL, ، على عكس Uri.EscapeUriString (يرى تعليقات إجابة drweb86).

  4. هو - هي ليس لديه أي حدود على طول السلسلة, ، على عكس Uri.EscapeDataString (يرى سؤال ذي صلة)، لذلك يمكن استخدامها لطلبات النشر، على سبيل المثال.

طريقة أفضل للاستخدام

Uri.EscapeUriString

لعدم الرجوع إلى .NET 4.

علق Levi Botelho أن جدول الترميزات الذي تم إنشاؤه سابقا لم يعد دقيقا .NET 4.5، لأن الترميزات تغيرت قليلا بين .NET 4.0 و 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
  • Escapedurredring: Uri.EscapeUriString
  • htmlencoded: HttpUtility.HtmlEncode
  • htmlattribodeNcoded: HttpUtility.HtmlAttributeEncode
  • webutilityhtmlencoded: WebUtility.HtmlEncode
  • مسدس: Uri.HexEscape

ملاحظات:

  1. يمكن لمس Hexescape فقط التعامل مع أول 255 حرفا. لذلك يلقي استثناء و ArgumentoutOutoFrange للأحرف اللاتينية الممتدة (مثل eg).

  2. تم إنشاء هذا الجدول في .NET 4.5 (انظر الإجابة https://stackoverflow.com/a/11236038/216440. للترميزات ذات الصلة ب .NET 4.0 وتحت).

تعديل:

  1. نتيجة إجابة الشاقلة، أضفت Urefutility Urlencode وأساليب HTMLEncode الجديدة، والتي تم تقديمها في .NET 4.5.

ترميز URL سهل في .NET. يستخدم:

System.Web.HttpUtility.UrlEncode(string url)

إذا كان سيتم فك تشفيره للحصول على اسم المجلد، فستظل بحاجة إلى استبعاد الأحرف التي لا يمكن استخدامها في أسماء المجلدات (*،؟، /، إلخ)

إذا لم تتمكن من رؤية system.web، فقم بتغيير إعدادات المشروع الخاصة بك. يجب أن يكون الإطار المستهدف ".NET Framework 4" بدلا من "ملف تعريف عميل .NET Framework 4"

تنفيذ .NET لل UrlEncode لا يتوافق مع RFC 3986.

  1. لا يتم تشفير بعض الأحرف ولكن يجب أن تكون. ال !()* يتم سرد الأحرف في قسم 2.2 RFC كحرف محفوظة يجب ترميزها حتى الآن .NET فشل في تشفير هذه الأحرف.

  2. يتم تشفير بعض الأحرف ولكن يجب ألا تكون كذلك. ال .-_ لا يتم سرد الأحرف في القسم 2.2 ل RFC كحرف محجوز لا ينبغي ترميزه بعد .NET ترميز هذه الأحرف بشكل خاطئ.

  3. تحدد RFC أنه يجب أن تكون متسقة، يجب أن تستخدم التطبيقات HEXDIG الحالة العلوية، حيث تنتج .NET Hexdig الحالة الصغيرة.

لقد كتبت طريقة C # التي ترميز كل الرموز:

    /// <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();
    }

من الناحية المثالية، ستذهب هذه في فصل يسمى "filenaming" أو ربما تعيد تسمية المشفرة إلى "filenameNCODE". ملاحظة: هذه غير مصممة للتعامل مع المسارات الكاملة، فقط المجلد و / أو أسماء الملفات. من الناحية المثالية، ستقسم ("/") مسارك الكامل أولا ثم تحقق من القطع. ومن الواضح بدلا من الاتحاد، يمكنك فقط إضافة شخصية "٪" إلى قائمة الأحرف غير المسموح بها في Windows، لكنني أعتقد أنها أكثر فائدة / قابلة للقراءة / واقعية بهذه الطريقة. فك شفرة () هي بالضبط نفس الشيء ولكن تبديل استبدال (URI.HExescape (S [0])، S) "هرب" بالحرف.

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;
    }

شكرا @ سيمون تيوزي لجدول مفيدة للغاية أعلاه!

بالإضافة إلى إجابة Dan Herbert، يجب أن نرفض فقط القيم بشكل عام.

SPLIT لديه تقسيم المعلمة المعلمات ('&'، '=')؛ التعبير أولا انقسام by & ثم "=" العناصر الفردية هي جميع القيم التي يجب تشفيرها أدناه.

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);
        }
    }
}

أعتقد أن الناس هنا حصلوا على رسائل UrLEncode. urlencoding هو ليس ما تريد - تريد ترميز الأشياء التي لن تعمل كاسم ملف على النظام المستهدف.

على افتراض أنك تريد بعض العمومية - لا تتردد في العثور على الأحرف غير القانونية على عدة أنظمة (Macos و Windows و Linux و Unix)، والاتحاد لهم لتشكيل مجموعة من الأحرف للهروب.

أما بالنسبة للهروب، يجب أن يكون Hexescape جيدا (استبدال الشخصيات باستخدام٪ XX). قم بتحويل كل حرف إلى بايت UTF-8 وتشفير كل شيء> 128 إذا كنت ترغب في دعم الأنظمة التي لا تفعل Unicode. ولكن هناك طرق أخرى، مثل استخدام خطأ مرة أخرى "" أو ترميز HTML "". يمكنك إنشاء خاصة بك. كل ما يجب أن يفعله كل نظام هو "تشفير" الشخصية غير القابلة للتحول بعيدا. تسمح لك النظم المذكورة أعلاه بإعادة إنشاء الاسم الأصلي - ولكن شيء مثل استبدال الأحرف السيئة مع المسافات يعمل أيضا.

على نفس الظل على النحو الوارد أعلاه، الوحيد الذي يستخدمه هو

uri.escapedatastring.

- إنه يرمدي كل ما هو مطلوب لل Oauth، لا يرمز الأشياء التي يحظرها oauth الترميز، وترميز المساحة كنسبة٪ 20 وليس + (أيضا في مواصفات اليمين) انظر: RFC 3986. AFAIK، هذا هو أحدث المواصفات URI.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top