URL में एम्परसेंड से बचना


203

मैं एक जीईटी संदेश भेजने की कोशिश कर रहा हूं जिसमें एम्परसेंड्स के साथ तार हैं और यह पता नहीं लगा सकते हैं कि URL में एम्परसैंड कैसे बच सकता है।

उदाहरण:

http://www.example.com?candy_name=M&M
result => candy_name = M

मैंने भी कोशिश की:

http://www.example.com?candy_name=M\&M
result => candy_name = M\\

मैं मैन्युअल रूप से URL का उपयोग कर रहा हूं, इसलिए मुझे केवल सही वर्णों की आवश्यकता है।

मैं किसी भी पुस्तकालयों का उपयोग नहीं कर सकता। यह कैसे किया जा सकता है?

जवाबों:


350

उन्हें प्रतिशत-एनकोडेड करने की आवश्यकता है:

> encodeURIComponent('&')
"%26"

तो आपके मामले में, URL जैसा दिखेगा:

http://www.mysite.com?candy_name=M%26M

2
: -% 26 मेरे लिए काम नहीं कर रहा है। क्या कोई और उपाय है?
संजीव

2
जब मैं प्रतिस्थापित करता हूं और% 26 में आता हूं, तब भी यही त्रुटि दिखाई देती हैA potentially dangerous Request.Path value was detected from the client (&).
संजीव

4
@ संजीव: यह आपके कोड की समस्या है, प्रतिशत एन्कोडिंग नहीं। प्रश्न पूछें।
ब्लेंडर

2
@ संजीव सुनिश्चित करें कि आप पहले "" और "% 26" के साथ प्रतिस्थापित करते हैं। कोड देखें ::: NSString * संदेश = @ "हैलो जैक एंड जिल"; संदेश = [संदेश stringByReplacingOccurrencesOfString: @ "&" withString: @ "% 26"]; संदेश = [संदेश stringByAppendingString: @ ""]; संदेश = [संदेश stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding];
नीरव

40

यह केवल URL में एम्परसेंड पर लागू नहीं होता है, बल्कि सभी आरक्षित वर्णों पर लागू होता है । जिनमें से कुछ में शामिल हैं:

 # $ & + ,  / : ; = ? @ [ ]

विचार &एक HTML दस्तावेज़ में एन्कोडिंग के समान है , लेकिन संदर्भ HTML दस्तावेज़ के भीतर होने के अलावा, URI के भीतर भी बदल गया है। तो, प्रतिशत-एन्कोडिंग दोनों संदर्भों के अंदर पार्सिंग के साथ समस्याओं को रोकता है।

वह स्थान जहाँ यह बहुत काम आता है, जब आपको किसी URL को किसी अन्य URL के अंदर रखने की आवश्यकता होती है। उदाहरण के लिए, यदि आप ट्विटर पर कोई स्टेटस पोस्ट करना चाहते हैं:

http://www.twitter.com/intent/tweet?status=What%27s%20up%2C%20StackOverflow%3F(http%3A%2F%2Fwww.stackoverflow.com)

मेरे ट्वीट में बहुत सारे आरक्षित वर्ण हैं, अर्थात् ?'():/, इसलिए मैंने statusURL पैरामीटर के पूरे मान को इनकोड किया । mailto:संदेश बॉडी या विषय का उपयोग करने वाले लिंक का उपयोग करते समय यह भी मददगार होता है , क्योंकि आपको लाइन ब्रेक, एम्परसेंड आदि को अक्षुण्ण रखने के लिए पैरामीटर bodyऔर एनकोड करने की आवश्यकता होती subjectहै।

जब आरक्षित सेट (एक "आरक्षित वर्ण") के एक चरित्र का एक निश्चित संदर्भ में विशेष अर्थ ("आरक्षित उद्देश्य") होता है, और एक यूआरआई योजना कहती है कि किसी अन्य उद्देश्य के लिए उस चरित्र का उपयोग करना आवश्यक है, तो चरित्र प्रतिशत-एन्कोडेड होना चाहिए। एक आरक्षित चरित्र को प्रतिशत-एन्कोडिंग में ASCII में चरित्र को उसके संबंधित बाइट मान में परिवर्तित करना और फिर हेक्साडेसिमल अंकों की एक जोड़ी के रूप में उस मूल्य का प्रतिनिधित्व करना शामिल है। अंक, जो एक प्रतिशत चिह्न ("%") से पहले निकलते हैं, जो एक बच चरित्र के रूप में उपयोग किया जाता है, तब आरक्षित चरित्र के स्थान पर URI में उपयोग किया जाता है। (एक गैर- ASCII चरित्र के लिए, यह आमतौर पर UTF-8 में अपने बाइट अनुक्रम में परिवर्तित होता है, और फिर प्रत्येक बाइट मान को ऊपर के रूप में दर्शाया जाता है।) आरक्षित वर्ण "/", उदाहरण के लिए, यदि "पथ" में उपयोग किया जाता है। एक यूआरआई का घटक, पथ खंडों के बीच एक सीमांकक होने का विशेष अर्थ है। यदि, किसी दिए गए URI स्कीम के अनुसार, "/" को एक पथ खंड में होना चाहिए, तो तीन वर्ण "% 2F" या "% 2f" को एक कच्चे "/" के बजाय खंड में उपयोग किया जाना चाहिए।

http://en.wikipedia.org/wiki/Percent-encoding#Percent-encoding_reserved_characters


4
उपरोक्त सूची में, ! ' ( ) *URL का उपयोग करके एन्कोडेड नहीं हैं encodeURIComponent
अमिल वडूवारा

एक php फ़ंक्शन urlencode है जो इस समस्या को हल करता है: उपयोग $ escapedfilename = urlencode ($ filename);
जेरेमी यंग


3

आप% वर्णों का उपयोग उन 'वर्ण' से बचने के लिए कर सकते हैं जिन्हें URL में अनुमति नहीं है। देखें [RFC 1738]।

Http://www.asciitable.com/ पर ASCII मूल्यों की तालिका ।

आप देख सकते हैं &हेक्साडेसिमल में 26 है - इसलिए आपको एम% 26 एम की आवश्यकता है।




1

मैं ब्लेंडर समाधान पर एक छोटी टिप्पणी जोड़ना चाहूंगा।

आप निम्न कार्य कर सकते हैं:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M');

यह आउटपुट:

http://example.com?candy_name=M%26M

इसके बारे में महान बात यह केवल और किसी भी विशिष्ट चरित्र के लिए काम नहीं करती है।

उदाहरण के लिए:

var link = 'http://example.com?candy_name=' + encodeURIComponent('M&M?><')

आउटपुट:

"http://example.com?candy_name=M%26M%3F%3E%3C"

0

आप इस एन्कोडर्कोम्पोनेंट फ़ंक्शन का उपयोग करके अपने तर्क पारित कर सकते हैं ताकि आपको किसी विशेष वर्ण को पारित करने के बारे में चिंता करने की आवश्यकता न हो।

data: "param1=getAccNos&param2="+encodeURIComponent('Dolce & Gabbana') OR
var someValue = 'Dolce & Gabbana';
data : "param1=getAccNos&param2="+encodeURIComponent(someValue)

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

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