2013-04-24 6 views
5


प्रतिशत एन्कोडिंग URL में भेजने से पहले

मैं # जैसे विशेष वर्ण पास करनी होगी ,! फेसबुक, ट्विटर और ऐसी सामाजिक साइटों के यूआरएल में आदि। इसके लिए मैं यूआरएल एस्केप कोड के साथ ऐसे पात्रों को बदल रहा हूं।
return valToEncode.Replace("!", "%21").Replace("#", "%23") .Replace("$", "%24").Replace("&", "%26") .Replace("'", "%27").Replace("(", "%28") .Replace(")", "%29").Replace("*", "%2A");

यह मेरे लिए काम करता है, लेकिन मैं इसे और अधिक efficiently.Is इस तरह के पात्रों से बचने के लिए किसी अन्य तरीके से करना चाहते हैं? मैंने सर्वर.रलेनकोड() के साथ प्रयास किया लेकिन फेसबुक इसे प्रस्तुत नहीं करता है।

अग्रिम धन्यवाद,
प्रिया

उत्तर

1

उपयोग System.Web.HttpUtility.UrlEncode या बजाय इसे मैन्युअल रूप से बनाने की System.Net.WebUtility.UrlEncode

20

आपको Uri.EscapeDataString विधि का उपयोग करना चाहिए यदि आप RFC3986 मानक के साथ संगतता चाहते हैं, जहां प्रतिशत-एन्कोडिंग परिभाषित किया गया है।

उदाहरण रिक्त स्थान के लिए हमेशा %20 चरित्र के रूप में एन्कोड किया जाएगा:

var result = Uri.EscapeDataString("a q"); 
// result == "a%20q" 

HttpUtility.UrlEncode के उपयोग का उदाहरण (जो जिस तरह से आंतरिक रूप से HttpServerUtility.UrlEncode द्वारा प्रयोग किया जाता है) के लिए, जबकि रिटर्न + चरित्र:

var result = HttpUtility.UrlEncode("a q") 
// result == "a+q" 

और क्या है, Uri.EscapeDataString का व्यवहार क्लाइंट साइड encodeURIComponent जावास्क्रिप्ट विधि के साथ संगत है (केस संवेदनशीलता को छोड़कर, लेकिन आरएफसी 3 9 86 कहता है यह अप्रासंगिक है)।

+1

यह भी इस बात पर निर्भर करता है कि एफबी, ट्विटर आदि में आईआरआई आईडीएन पार्सिंग सक्षम है या नहीं। उदाहरण के लिए ट्विटर 1.1 में यह है, इसलिए उदाहरण जैसे अक्षर। '!'को एन्कोड किया जाना चाहिए ("% 21") – mhoff

1

उन लोगों के लिए जो अभी भी खोज रहे हैं, थॉमस बी ने इसके लिए एक महान लाइनर प्रदान किया है।

Regex.Replace(Uri.EscapeDataString(s), "[\!*\'\(\)]", Function(m) Uri.HexEscape(Convert.ToChar(m.Value(0).ToString()))) 

this excellent answer जो भी समस्या के लिए एक ध्वनि समाधान प्रदान करता है के तहत टिप्पणियों में मिला।

Uri.EscapeDataString के लिए व्यवहार .Net 4.5 में परिवर्तन।

आरक्षित और अनारक्षित अक्षरों की सूची अब RFC 3986.

का समर्थन करता है Application Compatibility in the .NET Framework 4.5 देखें।

आरएफसी 3 9 86 के लिए specific reserved characters भी ध्यान दें। मैंने या तो बड़े पैमाने पर कार्य का परीक्षण नहीं किया है और न ही मैंने आरएफसी 23 9 6 का अध्ययन करने के लिए समय निकाला है, इसलिए मैं केवल यह मान सकता हूं कि एंड्रयू और थॉमस आरक्षित पात्रों का सबसेट इस्तेमाल कर रहे हैं क्योंकि वह सबसेट आरएफसी 23 9 6 और आरएफसी 3 9 86 के बीच अंतर को दर्शाता है और शेष वर्ण पहले से ही Uri.EscapeDataString द्वारा संभाले जाते हैं।

1

यह कोड "आरसीसी 3 9 86 प्रति प्रति प्रतिशत" होगा। HttpUtility.EncodeUrl कई पात्रों ('!', '*', '(', ')') के लिए खाता नहीं है और हेक्स अक्षरों के बाद ऊपरी मामला नहीं है % चरित्र

public static string PercentEncode(string value) 
{ 
    StringBuilder retval = new StringBuilder(); 
    foreach (char c in value) 
    { 
     if ((c >= 48 && c <= 57) || //0-9 
      (c >= 65 && c <= 90) || //a-z 
      (c >= 97 && c <= 122) || //A-Z      
      (c == 45 || c == 46 || c == 95 || c == 126)) // period, hyphen, underscore, tilde 
     { 
      retval.Append(c); 
     } 
     else 
     { 
      retval.AppendFormat("%{0:X2}", ((byte)c)); 
     } 
    } 
    return retval.ToString(); 
} 
+1

SO में आपका स्वागत है। कृपया समझें: यह उत्तर वास्तव में दो कारणों से ** खराब ** है: ए) कोई स्वरूपण नहीं - प्रारूप को कैसे समझना है, और यहां तक ​​कि एक ** पूर्वावलोकन ** फ़ंक्शन भी समझने में बहुत मदद है। उस बी का प्रयोग करें) "कोड केवल जवाब" हतोत्साहित हैं। हमेशा कुछ स्पष्टीकरण पर विचार करें। – GhostCat

+0

धन्यवाद, मैंने आपकी प्रतिक्रिया के आधार पर अपना उत्तर संपादित कर लिया है। – user8166689

संबंधित मुद्दे