هل C# لديها ما يعادل جافا سكريبت encodeURIComponent()?
-
01-07-2019 - |
سؤال
في جافا سكريبت:
encodeURIComponent("©√") == "%C2%A9%E2%88%9A"
هل هناك يعادلها C# التطبيقات ؟ للهروب HTML حرفا كنت:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"&#" + ((int)m.Value[0]).ToString() + ";");
ولكن انا غير متأكد من كيفية تحويل المباراة إلى الصحيح الست عشري أن شبيبة الاستخدامات.على سبيل المثال هذا الكود:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));
يعود "%a9%221a"
بالنسبة "©√"
بدلا من "%C2%A9%E2%88%9A"
.يبدو أنني بحاجة إلى تقسيم السلسلة إلى بايت أو ما شابه.
تحرير:هذا هو التطبيق ويندوز فقط العناصر المتوفرة في System.Web
هي: AspNetHostingPermission
, AspNetHostingPermissionAttribute
, ، AspNetHostingPermissionLevel
.
المحلول
Uri.EscapeDataString
أو HttpUtility.UrlEncode
هو الطريق الصحيح للهروب من سلسلة من المفترض أن تكون جزء من URL.
خذ على سبيل المثال سلسلة "Stack Overflow"
:
HttpUtility.UrlEncode("Stack Overflow")
-->"Stack+Overflow"
Uri.EscapeUriString("Stack Overflow")
-->"Stack%20Overflow"
Uri.EscapeDataString("Stack + Overflow")
--> أيضا بترميز"+" to "%2b"
---->Stack%20%2B%20%20Overflow
إلا أن الأخير هو الصحيح عند استخدامها الفعلي جزء من URL (بدلا من قيمة واحدة من سلسلة استعلام معلمات)
نصائح أخرى
HttpUtility.HtmlEncode
/ فك شفرة
HttpUtility.UrlEncode
/ فك شفرة
يمكنك إضافة إشارة إلى System.Web
الجمعية إذا لم تكن متوفرة في المشروع الخاص بك
حاولت أن أفعل متوافق التناظرية من جافا سكريبت encodeURIComponent c# و بعد 4 ساعات من التجارب وجدت هذا
c# كود:
string a = "!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");
والنتيجة هي:!%40%23%24%25%5e%26*()_%2b%20some%20text%20here%20%d0%b0%d0%bb%d0%b8%20%d0%bc%d0%b0%d0%bc%d0%b5%d0%b4%d0%be%d0%b2%20%d0%b1%d0%b0%d0%ba%d1%83
بعد فك ذلك مع جافا سكريبت decodeURLComponent();
سوف تحصل على هذا:!@#$%^&*()_+ بعض النص هنا али мамедов баку
شكرا لك على الاهتمام
النظام.Uri.EscapeUriString() لا يبدو أن تفعل أي شيء ، ولكن النظام.Uri.الهروبالبياناتسلسلة() عملت بالنسبة لي.
محاولة Server.UrlEncode()
, أو System.Web.HttpUtility.UrlEncode()
بالنسبة الحالات عندما لم يكن لديك الوصول إلى Server
الكائن.يمكنك أيضا استخدام System.Uri.EscapeUriString()
تجنب إضافة إشارة إلى System.Web
الجمعية.
يمكنك استخدام كائن الملقم في النظام.مساحة ويب
الملقم.UrlEncode الخادم.UrlDecode الخادم.HtmlEncode و الخادم.HtmlDecode.
تحرير:ملصق وأضاف أن هذا كان تطبيق ويندوز و لا تشكل مجموعة واحدة كما كان يعتقد.البنود المذكورة أعلاه سوف تكون متاحة من هتبوتيليتي الفئة داخل النظام.ويب التي يجب إضافة مرجع إلى المشروع.
ويندوز المتجر ، لن يكون هتبوتيليتي.بدلا من ذلك لديك:
على URI, قبل'؟':
- النظام.Uri.EscapeUriString("example.com/Stack تجاوز++?")
- -> "example.com/Stack%20Overflow++?"
على URI اسم الاستعلام أو القيمة ، بعد'؟':
- النظام.Uri.EscapeDataString("تجاوز سعة مكدس++")
- -> "كومة%20Overflow%2B%2B"
عن x-www-form-urlencoded اسم الاستعلام أو القيمة ، في فترة ما بعد المحتوى:
- System.Net.WebUtility.UrlEncode("تجاوز سعة مكدس++")
- -> "كومة+تجاوز%2B%2B"