कुछ वर्ण, यूआरएल का हिस्सा नहीं हो सकते. जैसे, स्पेस. इसके अलावा, कुछ अन्य वर्णों का यूआरएल में खास मतलब होता है. एचटीएमएल फ़ॉर्म में, = वर्ण का इस्तेमाल किसी नाम को वैल्यू से अलग करने के लिए किया जाता है. इस समस्या को हल करने के लिए, यूआरआई के सामान्य सिंटैक्स में यूआरएल एन्कोडिंग का इस्तेमाल किया जाता है. वहीं, एचटीएमएल फ़ॉर्म में ऐसे सभी वर्णों के लिए पर्सेंट एन्कोडिंग लागू करने के बजाय, कुछ अन्य बदलाव किए जाते हैं.
उदाहरण के लिए, किसी स्ट्रिंग में मौजूद स्पेस को %20 के साथ कोड में बदला जाता है या प्लस के निशान (+) से बदला जाता है. अगर सेपरेटर के तौर पर पाइप वर्ण (|) का इस्तेमाल किया जाता है, तो पाइप को %7C के तौर पर कोड में बदलना न भूलें. स्ट्रिंग में मौजूद कॉमा को %2C के तौर पर एन्कोड किया जाना चाहिए.
हमारा सुझाव है कि आप अपने प्लैटफ़ॉर्म की सामान्य यूआरएल बनाने वाली लाइब्रेरी का इस्तेमाल करें, ताकि आपके यूआरएल अपने-आप कोड में बदल जाएं. इससे यह पक्का किया जा सकेगा कि आपके प्लैटफ़ॉर्म के लिए यूआरएल सही तरीके से एस्केप किए गए हैं.
मान्य यूआरएल बनाना
आपको लग सकता है कि "मान्य" यूआरएल अपने-आप समझ में आ जाता है, लेकिन ऐसा नहीं है. उदाहरण के लिए, किसी ब्राउज़र के पता बार में डाले गए यूआरएल में खास वर्ण (जैसे, "上海+中國") हो सकते हैं. ब्राउज़र को ट्रांसमिशन से पहले, उन वर्णों को किसी दूसरी एन्कोडिंग में बदलना पड़ता है.
इसी तरह, UTF-8 इनपुट जनरेट या स्वीकार करने वाला कोई भी कोड, UTF-8 वर्णों वाले यूआरएल को "मान्य" मान सकता है. हालांकि, उन वर्णों को वेब सर्वर पर भेजने से पहले, उन्हें अनुवाद करने की भी ज़रूरत होगी.
इस प्रोसेस को
यूआरएल-एन्कोडिंग या परसेंट-एन्कोडिंग कहा जाता है.
विशेष वर्ण
हमें खास वर्णों का अनुवाद करना होगा, क्योंकि सभी यूआरएल को यूनिफ़ॉर्म रिसॉर्स आइडेंटिफ़ायर (यूआरआई) की खास जानकारी में बताए गए सिंटैक्स के मुताबिक होना चाहिए. इसका मतलब है कि यूआरएल में सिर्फ़ ASCII वर्णों का एक खास सबसेट होना चाहिए: जाने-पहचाने अक्षरों और अंकों वाले सिंबल, और यूआरएल में कंट्रोल वर्णों के तौर पर इस्तेमाल करने के लिए रिज़र्व किए गए कुछ वर्ण. इस टेबल में इन वर्णों के बारे में खास जानकारी दी गई है:
| सेट करें | वर्ण | यूआरएल का इस्तेमाल |
|---|---|---|
| अल्फ़ान्यूमेरिक | a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 | टेक्स्ट स्ट्रिंग, स्कीम का इस्तेमाल (http), पोर्ट (8080) वगैरह. |
| गैर-आरक्षित | - _ . ~ | टेक्स्ट स्ट्रिंग |
| बुकिंग की गई | ! * ' ( ) ; : @ & = + $ , / ? % # [ ] | कंट्रोल वर्ण और/या टेक्स्ट स्ट्रिंग |
कोई मान्य यूआरएल बनाते समय, आपको यह पक्का करना होगा कि उसमें सिर्फ़ वे वर्ण शामिल हों जो टेबल में दिखाए गए हैं. वर्णों के इस सेट का इस्तेमाल करने के लिए, यूआरएल को सही फ़ॉर्मैट में बदलने से आम तौर पर दो समस्याएं होती हैं. इनमें से एक समस्या, वर्णों को हटाने और दूसरी समस्या, वर्णों को बदलने से जुड़ी होती है:
- आपको जिन वर्णों को हैंडल करना है वे ऊपर दिए गए सेट से बाहर मौजूद हैं. उदाहरण के लिए, विदेशी भाषाओं के वर्णों, जैसे कि
上海+中國को ऊपर दिए गए वर्णों का इस्तेमाल करके कोड में बदलना ज़रूरी है. आम तौर पर, स्पेस (जिनकी अनुमति यूआरएल में नहीं होती) को दिखाने के लिए, प्लस'+'वर्ण का भी इस्तेमाल किया जाता है. - वर्ण, ऊपर दिए गए सेट में रिज़र्व किए गए वर्णों के तौर पर मौजूद होते हैं. हालांकि, इन्हें लिटरल तौर पर इस्तेमाल करना ज़रूरी है.
उदाहरण के लिए, यूआरएल में
?का इस्तेमाल, क्वेरी स्ट्रिंग की शुरुआत दिखाने के लिए किया जाता है. अगर आपको "? and the Mysterions" स्ट्रिंग का इस्तेमाल करना है, तो आपको'?'वर्ण को कोड में बदलना होगा.
यूआरएल में कोड किए जाने वाले सभी वर्णों को '%' वर्ण और उनके UTF-8 वर्ण से जुड़ी दो वर्णों वाली हेक्स वैल्यू का इस्तेमाल करके कोड किया जाता है. उदाहरण के लिए, UTF-8 में 上海+中國 को यूआरएल-कोड में बदलकर %E4%B8%8A%E6%B5%B7%2B%E4%B8%AD%E5%9C%8B के तौर पर लिखा जाएगा. स्ट्रिंग ? and the Mysterians को यूआरएल के तौर पर कोड में बदलकर, %3F+and+the+Mysterians या %3F%20and%20the%20Mysterians किया जाएगा.
ऐसे सामान्य वर्ण जिन्हें एन्कोड करने की ज़रूरत होती है
कुछ सामान्य वर्ण जिन्हें कोड में बदलना ज़रूरी है:
| असुरक्षित वर्ण | एन्कोड की गई वैल्यू |
|---|---|
| स्पेस | %20 |
| " | %22 |
| < | %3C |
| > | %3E |
| # | %23 |
| % | %25 |
| | | %7C |
उपयोगकर्ता से मिले इनपुट के यूआरएल को बदलना कभी-कभी मुश्किल होता है. उदाहरण के लिए, कोई उपयोगकर्ता "5th&Main St." के तौर पर पता डाल सकता है. आम तौर पर, आपको यूआरएल को उसके हिस्सों से बनाना चाहिए. साथ ही, उपयोगकर्ता के किसी भी इनपुट को लिटरल वर्णों के तौर पर मानना चाहिए.
इसके अलावा, Google Maps Platform की सभी वेब सेवाओं और स्टैटिक वेब एपीआई के लिए, यूआरएल में 16,384 से ज़्यादा वर्ण नहीं होने चाहिए. ज़्यादातर सेवाओं के लिए, वर्ण की यह सीमा शायद ही कभी पूरी हो. हालांकि, ध्यान दें कि कुछ सेवाओं में कई पैरामीटर होते हैं. इनकी वजह से, यूआरएल लंबे हो सकते हैं.