URL एनकोडर / डिकोडर
URL, क्वेरी पैरामीटर और पाथ सेगमेंट में सुरक्षित उपयोग के लिए स्ट्रिंग को पर्सेंट-एनकोड या डिकोड करें।
- जिस स्ट्रिंग को एनकोड (या डिकोड) करना है, उसे ऊपर बॉक्स में पेस्ट करें।
- किसी एक क्वेरी मान या पाथ सेगमेंट के लिए Component चुनें, और जिस पूरे URL में कुछ ही असुरक्षित कैरेक्टर हों उसके लिए पूरा URL चुनें।
- एनकोड या डिकोड पर क्लिक करें। आउटपुट इनपुट की जगह दिखेगा।
- परिणाम कॉपी करें, या फिर से शुरू करने के लिए साफ़ करें पर क्लिक करें।
यह क्या करता है?
URL / पर्सेंट-एनकोडिंग उन कैरेक्टरों को, जो URL में असुरक्षित या अस्पष्ट होते हैं, % के बाद उनके UTF-8 बाइट मान के हेक्स रूप से बदल देती है। Component मोड encodeURIComponent() का उपयोग करता है और हर रिज़र्व्ड कैरेक्टर को एनकोड करता है — क्वेरी स्ट्रिंग या पाथ में डाले जाने वाले मानों के लिए सही। पूरा URL मोड encodeURI() का उपयोग करता है, जो :/?#&= जैसे URL-संरचनात्मक कैरेक्टरों को वैसा ही रखता है।
उदाहरण
इनपुट:
hello world & café / 日本語 Component के रूप में एनकोड:
hello%20world%20%26%20caf%C3%A9%20%2F%20%E6%97%A5%E6%9C%AC%E8%AA%9E पूरे URL के रूप में एनकोड:
hello%20world%20&%20caf%C3%A9%20/%20%E6%97%A5%E6%9C%AC%E8%AA%9E ध्यान दें कि पूरा URL मोड में & और / वैसे ही रहते हैं क्योंकि URL में उनका संरचनात्मक अर्थ है।
सामान्य त्रुटियाँ और सावधानियाँ
अधिकांश एनकोडिंग समस्याएँ ग़लत मोड चुनने या एक ही इनपुट पर टूल को दो बार चलाने से आती हैं। नीचे सबसे आम मामले दिए गए हैं।
- क्वेरी मानों के लिए encodeURI का उपयोग। encodeURI("a&b=c") a&b=c (अपरिवर्तित) ही लौटाता है, जिससे क्वेरी स्ट्रिंग टूट जाती है। मानों के लिए Component मोड (encodeURIComponent) का उपयोग करें।
- डबल-एनकोडिंग। hello%20world को दूसरी बार एनकोड करने पर hello%2520world मिलता है। पहले डिकोड करें, या एक परत छोड़ दें।
- # को भूल जाना। क्वेरी मान के अंदर # को यदि %23 के रूप में एनकोड न किया जाए, तो उसे फ़्रैगमेंट की शुरुआत मान लिया जाता है।
- प्लस चिह्न भ्रम। फ़ॉर्म-एनकोडेड बॉडी में + का अर्थ स्पेस होता है, लेकिन URL के पाथ या क्वेरी में यह शाब्दिक + है। क्वेरी मान में असली प्लस भेजने के लिए इसे %2B के रूप में एनकोड करें।
- ग़लत पर्सेंट अनुक्रम। कभी भी एनकोड न किया गया एक अकेला % decodeURIComponent में URI malformed त्रुटि पैदा करता है। या तो % को %25 के रूप में एनकोड करें, या डिकोड करने से पहले अकेले % हटा दें।
- UTF-8 बनाम Latin-1 पुराने सर्वर। यह टूल हमेशा UTF-8 का उपयोग करता है। कुछ बहुत पुराने सिस्टम Latin-1 / windows-1252 की अपेक्षा करते हैं — वहाँ é %C3%A9 नहीं बल्कि %E9 होता है। यदि मोजीबेक दिखे, तो दूसरा छोर UTF-8 नहीं है।
अक्सर पूछे जाने वाले प्रश्न
encodeURI और encodeURIComponent में क्या अंतर है?
encodeURIComponent अक्षर, अंक और -_.!~*'() के अलावा सब कुछ एस्केप करता है, इसलिए यह अलग-अलग क्वेरी मानों और पाथ सेगमेंट के लिए सुरक्षित है। encodeURI :/?#&= जैसे URL-रिज़र्व्ड कैरेक्टरों को वैसे ही रहने देता है, इसलिए यह पूरी तरह संरचित URL को एनकोड करने के लिए है। 95% समय Component का उपयोग करें; पूरा URL तभी उपयोग करें जब आपके पास ज़्यादातर वैध URL हो जिसमें केवल थोड़े स्पेस या Unicode हों।
क्वेरी स्ट्रिंग में वास्तव में किन कैरेक्टरों को एनकोडिंग की ज़रूरत होती है?
मान के अंदर क्वेरी स्ट्रिंग डिलिमिटर & और = अनिवार्य रूप से एनकोड होने चाहिए (वरना वे सेपरेटर जैसे दिखते हैं)। स्पेस %20 या + बनता है। फ़्रैगमेंट मार्कर # को एनकोड करना ज़रूरी है। साथ ही /, ?, कोई भी ग़ैर-ASCII और कंट्रोल कैरेक्टर। encodeURIComponent इन सबको संभालता है; encodeURI &, =, /, ?, # को अपरिवर्तित छोड़ देता है क्योंकि ये URL-संरचनात्मक हैं।
मेरा URL डबल-एनकोड क्यों हो रहा है?
डबल-एनकोडिंग तब होती है जब आप पहले से एनकोडेड मान को दोबारा एनकोड कर देते हैं। स्पेस पहले %20 बनता है, फिर वह % खुद %25 बन जाता है और मिलता है %2520। सामान्य वजह पहले से एनकोडेड URL को फिर से encodeURIComponent से गुज़ारना है, या कोई फ्रेमवर्क आपकी मैन्युअल एनकोडिंग के ऊपर स्वतः एक बार और एनकोड कर देता है। एक बार डिकोड करें और फिर साफ़-सुथरा एनकोड करें, या एक परत छोड़ दें।
यह टूल इमोजी या एक्सेंट वाले अक्षर जैसे ग़ैर-ASCII कैरेक्टर कैसे संभालता है?
JavaScript के एनकोडर ग़ैर-ASCII कैरेक्टरों को पहले UTF-8 बाइट्स में बदलते हैं, फिर हर बाइट को पर्सेंट-एनकोड करते हैं। तो é %C3%A9 (दो बाइट्स) बनता है और 😀 जैसा इमोजी %F0%9F%98%80 (चार बाइट्स) बनता है। डिकोडिंग इसका उलटा करती है। यह मानक RFC 3986 व्यवहार है और हर आधुनिक सर्वर पर काम करता है।
डिकोडिंग "URI malformed" के साथ क्यों फ़ेल होती है?
decodeURIComponent किसी अमान्य पर्सेंट अनुक्रम पर त्रुटि देता है — एक अकेला % जिसके बाद दो हेक्स अंक न हों (जैसे %ZZ या अकेला %), या अमान्य UTF-8 बाइट अनुक्रम (जैसे वैध कंटिन्यूएशन बाइट के बिना %C3)। सामान्य कारण: इनपुट में ऐसा शाब्दिक % जो कभी एनकोड ही नहीं हुआ, या ऐसी स्ट्रिंग जो पहले से एक बार डिकोड हो चुकी है और अब भी उसमें पर्सेंट चिह्न हैं।
स्पेस को + बनाएँ या %20?
दोनों ही प्रचलन में हैं। %20 हर जगह सही है — पाथ, क्वेरी स्ट्रिंग और फ़्रैगमेंट में। + का "स्पेस" अर्थ केवल HTML फ़ॉर्म सबमिशन में उपयोग किए जाने वाले application/x-www-form-urlencoded प्रारूप के अंदर लागू होता है। यह टूल encodeURIComponent की तरह %20 का उपयोग करता है। यदि आपको विशेष रूप से + चाहिए, तो एनकोडिंग के बाद %20 को + से बदल दें।