विशेष अक्षरों की URL एन्कोडिंग: एक डेवलपर संदर्भ
विशेष अक्षरों की URL एन्कोडिंग के लिए एक व्यापक संदर्भ, जिसमें स्पेस, ऐम्परसैंड, यूनिकोड और बहुत कुछ शामिल है।
URL में विशेष अक्षर
URL का एक सख्त सिंटैक्स होता है जिसे RFC 3986 में परिभाषित किया गया है। कई अक्षरों के विशेष अर्थ होते हैं या उन्हें URL के कुछ हिस्सों में अनुमति नहीं होती। इन अक्षरों को सही तरीके से एन्कोड करना विश्वसनीय वेब एप्लिकेशन और API बनाने के लिए बेहद ज़रूरी है।
स्पेस अक्षर
स्पेस अक्षर सबसे आम तौर पर एन्कोड किया जाने वाला अक्षर है। हालाँकि, संदर्भ के आधार पर इसे दो तरीकों से एन्कोड किया जा सकता है:
%20- RFC 3986 पर्सेंट-एन्कोडिंग, जिसका उपयोग URL पाथ और अधिकांश संदर्भों में होता है+-application/x-www-form-urlencodedफ़ॉर्मैट (HTML फ़ॉर्म सबमिशन) में उपयोग किया जाता है
जब आप प्रोग्रामेटिक रूप से URL बनाते हैं, तो एकरूपता के लिए %20 को प्राथमिकता दें। जब आप फ़ॉर्म डेटा तैयार करते हैं, तो + नोटेशन मानक होता है।
आरक्षित अक्षरों की गहराई से पड़ताल
ऐम्परसैंड (&)
ऐम्परसैंड क्वेरी पैरामीटर्स को अलग करता है। जब कोई ऐम्परसैंड किसी पैरामीटर मान के भीतर आता है, तो उसे %26 के रूप में एन्कोड किया जाना चाहिए ताकि उसे विभाजक (सेपरेटर) के रूप में न समझा जाए। HTML संदर्भों में, इसे एंटिटी-एन्कोडेड रूप में & के रूप में भी लिखा जाना चाहिए।
प्रश्नचिह्न (?)
प्रश्नचिह्न पाथ को क्वेरी स्ट्रिंग से अलग करता है। अगर कोई प्रश्नचिह्न किसी पैरामीटर मान में आता है, तो उसे %3F के रूप में एन्कोड किया जाना चाहिए। ध्यान दें कि encodeURI() प्रश्नचिह्नों को एन्कोड नहीं करता, जबकि encodeURIComponent() करता है।
हैश (#)
हैश चिह्न फ़्रैगमेंट आइडेंटिफ़ायर की शुरुआत करता है। URL में, किसी क्वेरी पैरामीटर मान में मौजूद किसी भी # को %23 के रूप में एन्कोड किया जाना चाहिए, वरना ब्राउज़र उसके बाद की हर चीज़ को फ़्रैगमेंट आइडेंटिफ़ायर मान लेगा और उसे सर्वर तक नहीं भेजेगा।
फ़ॉरवर्ड स्लैश (/)
फ़ॉरवर्ड स्लैश पाथ सेगमेंट्स को अलग करते हैं। जब कोई स्लैश किसी पाथ सेगमेंट के मान में आता है (जैसे कोई फ़ाइलनाम जिसमें स्लैश शामिल हो), तो उसे %2F के रूप में एन्कोड किया जाना चाहिए। ध्यान दें कि कुछ सर्वर %2F को डिकोड कर सकते हैं और फिर भी उसे पाथ विभाजक के रूप में मान सकते हैं।
यूनिकोड अक्षर
गैर-ASCII अक्षरों को पहले उनके UTF-8 बाइट अनुक्रम में बदलकर, फिर प्रत्येक बाइट को पर्सेंट-एन्कोड करके एन्कोड किया जाता है। यहाँ कुछ उदाहरण दिए गए हैं:
- ऐक्यूट के साथ लैटिन e (e) → UTF-8: 0xC3 0xA9 →
%C3%A9 - चीनी अक्षर (zhong) → UTF-8: 0xE4 0xB8 0xAD →
%E4%B8%AD - इमोजी (globe) → UTF-8: 0xF0 0x9F 0x8C 0x8D →
%F0%9F%8C%8D
विभिन्न URL घटकों में एन्कोडिंग
| घटक | जिन्हें एन्कोड करना ज़रूरी है | उदाहरण |
|---|---|---|
| पाथ सेगमेंट | स्पेस, ?, #, और गैर-ASCII | /path/my%20file |
| क्वेरी की | =, &, #, +, स्पेस | my%20key=value |
| क्वेरी मान | &, #, +, स्पेस, = | key=hello%20world |
| फ़्रैगमेंट | स्पेस और गैर-ASCII | #section%20one |
आम गलतियाँ
- क्वेरी मानों में
#को एन्कोड करना भूल जाना (URL का बाकी हिस्सा चुपचाप हटा दिया जाता है) - पहले से एन्कोड की गई स्ट्रिंग्स को दोबारा एन्कोड कर देना (जिससे
%20के बजाय%2520बन जाता है) - पैरामीटर मानों के लिए
encodeURIComponent()के बजायencodeURI()का उपयोग करना - क्वेरी मानों में
+को एन्कोड न करना (यह स्पेस के रूप में डिकोड हो जाता है) - यह मान लेना कि सभी सर्वर पाथ में
%2Fको एक जैसे तरीके से संभालते हैं