यह प्रश्न URL के क्वेरी स्ट्रिंग हिस्से में वर्णों से संबंधित है, जो ?
मार्क वर्ण के बाद दिखाई देता है।HTTP क्वेरी स्ट्रिंग में कौन से वर्ण बचने चाहिए?
प्रति Wikipedia, कुछ वर्ण शेष हैं और अन्य एन्कोड किए गए हैं (आमतौर पर %
भागने अनुक्रम के साथ)।
मैं इस वास्तविक विशिष्टताओं के लिए नीचे ट्रैक करने के लिए इतना है कि मुझे लगता है कि विकिपीडिया पृष्ठ में हर बुलेट बिंदु के पीछे औचित्य समझ में कोशिश कर रहा हूँ।
विरोधाभास उदाहरण 1:
HTML specification+
के रूप में एनकोड अंतरिक्ष के लिए कहते हैं और RFC1738 को आराम defers। हालांकि, यह आरएफसी कहता है कि ~
असुरक्षित है और इसके अलावा "[ए] असुरक्षित पात्रों को हमेशा यूआरएल के भीतर एन्कोड किया जाना चाहिए"। ऐसा लगता है कि विकिपीडिया का विरोधाभास है।
अभ्यास में, IE8 क्वेरी स्ट्रिंग उत्पन्न में ~
encodes, जबकि FF3 छोड़ देता है के रूप में।
विरोधाभास उदाहरण 2:
विकिपीडिया कहा गया है कि सभी पात्रों है कि यह उल्लेख नहीं है एन्कोड किया जाना चाहिए। विकिपीडिया में !
का उल्लेख नहीं है। लेकिन RFC1738 बताता है कि !
एक "विशेष" चरित्र है और "अनएन्कोडेड का उपयोग किया जा सकता है"। ऐसा लगता है कि विकिपीडिया का विरोधाभास है जो कहता है कि इसे एन्कोड किया जाना चाहिए।
अभ्यास में, IE8 क्वेरी स्ट्रिंग उत्पन्न में !
encodes, जबकि FF3 छोड़ देता है के रूप में।
मैं समझता हूं कि इसका नैतिकता शायद उन पात्रों को एन्कोड करने जा रहा है जो विकिपीडिया और विनिर्देशों के बीच संदेह में हैं। संभवतः यहां तक कि एन्कोडिंग के रूप में भी जा रहा है जो [ए-ज़ा-जे 0-9] नहीं है। मैं बस इस पर वास्तविक मानकों को जानना चाहूंगा।
निष्कर्ष
एल्गोरिथ्म विकिपीडिया पर वर्णित ठीक उन अक्षरों जो RFC3986 unreserved characters नहीं हैं encodes। यही है, यह अल्फान्यूमेरिक्स और -._~
के अलावा सभी पात्रों को एन्कोड करता है। एक विशेष मामले के रूप में, अंतरिक्ष +
के रूप में %20
प्रति RFC3986 के बजाय एन्कोड किया गया है।
कुछ अनुप्रयोग एक पुराने आरएफसी का उपयोग करें। तुलना के लिए, RFC2396 unreserved characters अल्फान्यूमेरिक्स और !'()*-._~
हैं।
तुलना के लिए, HTML5 working draft algorithm अल्फान्यूमेरिक्स और *-._
के अलावा सभी वर्णों को एन्कोड करता है। अंतरिक्ष के लिए विशेष केस एन्कोडिंग +
बनी हुई है। उल्लेखनीय अंतर यह है कि *
एन्कोड नहीं किया गया है और ~
एन्कोड किया गया है। (तकनीकी तौर पर, *
के इस हैंडलिंग RFC3986 भले ही *
reserved
में है क्योंकि यह sub-delims
जो query
उत्पादन में अनुमति दी जाती है के साथ संगत है।)
विकिपीडिया मानक मानकों का नहीं है। यदि संदेह में, मानक का उपयोग करें। –
@ जॉन - हालांकि * सही * मानक का उपयोग करना महत्वपूर्ण है। इस मामले में 3 9 86 है, पुराना 1738 नहीं। –