क्या C # में JavaScript के एन्कोडरिकॉमपॉइंटेंट () के बराबर है?


135

जावास्क्रिप्ट में:

encodeURIComponent("©√") == "%C2%A9%E2%88%9A"

क्या सी # अनुप्रयोगों के लिए एक समकक्ष है? मेरे द्वारा उपयोग किए गए 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

जवाबों:


217

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 के वास्तविक भाग के रूप में उपयोग किए जाने पर केवल अंतिम सही है (क्वेरी स्ट्रिंग मापदंडों में से एक के मूल्य के विपरीत)


मुख्य मुद्दा जो मैं कर रहा था वह मेरे समाधान में System.Web के संदर्भ में नहीं था, लेकिन मुझे EscapeUriString के बारे में पता नहीं था, धन्यवाद!
ट्रैविस

53
EncodeURIComponent () के विपरीत, Uri.EscapeUriString () "+" को "% 2b" में एनकोड नहीं करता है। इसके बजाय Uri.EscapeDataString () का उपयोग करें।
jwaliszko

4
System.Web के संदर्भ से बचने के लिए HttpUtility के बजाय WebUtility का उपयोग करें। .NET कोर में HttpUtility मौजूद नहीं है।
स्टीवन डी कॉक

2
@ आप अपने अंतिम पैराग्राफ को बोल्ड बनाने पर विचार करेंगे? इस पृष्ठ पर जानना सबसे महत्वपूर्ण बात लगती है, और इसे अधिक दृश्यता की आवश्यकता होती है।
तिमू

: इसके अलावा Uri.EscapeUriString और Uri.EscapeDataString के बीच अंतर के बारे में अधिक विवरण के लिए इस उत्तर को देखने stackoverflow.com/questions/4396598/...
जेसन

20

HttpUtility.HtmlEncode/ डीकोड
HttpUtility.UrlEncode/ डीकोड

System.Webयदि यह आपके प्रोजेक्ट में उपलब्ध नहीं है, तो आप असेंबली में एक संदर्भ जोड़ सकते हैं


मुझे अधिक विशिष्ट होना चाहिए था: यह एक विंडोज़ ऐप के लिए है, केवल सिस्टम में उपलब्ध आइटम हैं। ये हैं: AspNetHostingPermission, AspNetHostingPermissionAttribute, और AspNetHostingPermissionLevel।
ट्रैविस

5
आप System.Web असेंबली
डेविड थिबॉल्ट

2
HtmlEncoding एक पूरी तरह से अलग चीज है। UrlEncode एक गैर-संवेदी API है जिसका उपयोग कभी नहीं किया जाना चाहिए। यह पूरे URL को एनकोड करने का कोई मतलब नहीं है (जब तक कि आप वास्तव में पैरामीटर के रूप में उपयोग करने के लिए इसके मूल्य को एनकोड नहीं करना चाहते हैं - लेकिन यह ऐसा नहीं है)। एन्कोडिंग / भागने की बात यह है कि आप बता रहे हैं कि एक आरक्षित वर्ण को बिना इसके सामान्य अर्थ के माध्यम से पारित किया जाना चाहिए (जैसे, क्वेरी को पहचानता है, या क्वेरी पैरामीटर अलग करता है)। इसके लिए ऐसे ज्ञान की आवश्यकता होती है जो UrlEncode के पास नहीं है और नहीं हो सकते हैं।
ब्रैंडन पैडॉक 19

18

मैंने javascript के encodeURIComponent की पूरी संगत अनुरूपता c # के लिए करने की कोशिश की और अपने 4 घंटे के प्रयोगों के बाद मैंने यह पाया

सी # कोड:

string a = "!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");

परिणाम है: !% 40% 23% 24% 25% 5e% 26 * () _% 2b% 20some% 20text% 20 कहीं% 20% d0% b0% d0% bb% d0% b8% 20% d0% bc% D0% B0% D0% ई.पू.% D0% B5% D0% बी 4% D0% होना% D0% b2% 20% D0% B1% D0% B0% D0% बा% d1 83% से

जब आप इसे जावास्क्रिप्ट के डिकोड्यूरसेलकोम्पोनेंट () के साथ डीकोड कर दें;

आपको यह मिलेगा :! # # $% ^ & * () _ + कुछ पाठ यहाँ पर उपलब्ध हैं।

ध्यान देने के लिए धन्यवाद


2
काम करता है, लेकिन आप Uri.EscapeDataString("!@#$%^&*()_+ some text here али мамедов баку")इसके बजाय बस का उपयोग कर सकते हैं ।
mklement0

वास्तव में, Uri.EscapeDataStringवर्णों को '(' और ')' 'एनकोड HttpUtility.UrlEncodeकरता है जबकि ऐसा नहीं है।
19ystein Kolsrud

12

System.Uri.EscapeUriString () कुछ भी करने के लिए प्रतीत नहीं हुआ, लेकिन System.Uri.Escape Data String () ने मेरे लिए काम किया।


10

कोशिश करें Server.UrlEncode(), या System.Web.HttpUtility.UrlEncode()उदाहरण के लिए जब आपके पास Serverऑब्जेक्ट तक पहुंच न हो । आप विधानसभा में System.Uri.EscapeUriString()एक संदर्भ जोड़ने से बचने के लिए भी उपयोग कर सकते हैं System.Web


1
Uri.EscapeUriString () ने मेरे लिए कुछ नहीं किया, लेकिन मैं Uri.EscapeDataString ()
Toland Hon

3
@ कोलकाता: वास्तव में। कारण यह है कि Uri.EscapeUriString()जावास्क्रिप्ट के अनुरूप है encodeURI()- जो URI- आरक्षित वर्णों को संरक्षित करता है। जैसे कि /, &... जैसा है (प्लस #), जबकि - जैसा कि आपने खोजा है, यह वह है Uri.EscapeDataString()जो जावास्क्रिप्ट के अनुरूप है encodeURIComponent()
क्लेमेंट 0

8

विंडोज स्टोर ऐप के लिए, आपके पास HttpUtility नहीं होगी। इसके बजाय, आपके पास:

URI के लिए, '?' से पहले:

  • प्रणाली। Uri.EscapeUriString ("example.com/Stack Overflow ++?")
    • -> "example.com/Stack%20Overflow++?"

URI क्वेरी नाम या मान के लिए, '?' के बाद:

  • प्रणाली। Uri.EscapeDataString ("ढेर अतिप्रवाह ++")
    • -> "स्टैक% 20Overflow% 2B% 2B"

एक के लिए एक्स-www फार्म-urlencoded क्वेरी नाम या मूल्य, एक पोस्ट सामग्री में:

  • System.Net। WebUtility.UrlEncode ("ढेर अतिप्रवाह ++")
    • -> "स्टैक + ओवरफ्लो% 2B% 2B"

6

आप System.Web नाम स्थान में सर्वर ऑब्जेक्ट का उपयोग कर सकते हैं

Server.UrlEncode, Server.UrlDubble, Server.HtmlEncode, और Server.HtmlDubble।

संपादित करें: पोस्टर ने कहा कि यह एक विंडोज़ अनुप्रयोग था और एक वेब नहीं जैसा कि एक विश्वास करेगा। ऊपर सूचीबद्ध आइटम, सिस्टम के अंदर HttpUtility क्लास से उपलब्ध होंगे। जिसे प्रोजेक्ट के संदर्भ के रूप में जोड़ा जाना चाहिए।


1
सर्वर ऑब्जेक्ट एक विंडोज़ ऐप से अप्राप्य है
ट्रैविस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.