URL में percent-encoding: %20, + और %2F का असली मतलब
Percent-encoding में किसी ऐसे अक्षर को, जिसे URL सुरक्षित रूप से नहीं ले जा सकता, percent चिह्न और उसके byte मान के hexadecimal रूप में लिखा जाता है। space %20 बन जाता है, ampersand %26 बन जाता है, और slash %2F बन जाता है। यह encoding लिंक के ढाँचे की रक्षा करती है, क्योंकि & और = जैसे अक्षर query string के हिस्सों को अलग करते हैं।
कौन से अक्षर जैसे हैं वैसे रह सकते हैं
URI standard (RFC 3986), जिस पर URL बने हैं, कुछ अक्षरों को छूट देता है: A से Z और a से z तक के अक्षर, अंक, और चार चिह्न - _ . ~। इन्हें कभी encode करने की ज़रूरत नहीं होती। URL में बाकी अक्षरों का अपना काम होता है। colon scheme को बाकी हिस्से से अलग करता है, slash path के हिस्सों को, question mark query की शुरुआत करता है, hash fragment की शुरुआत करता है, और & व = query को नामों और मानों में बाँटते हैं। जिस अक्षर का कोई काम हो, उसे तब encode करना होता है जब आप उसे ढाँचे के बजाय डेटा के रूप में लिखना चाहें।
इसी वजह से एक ही अक्षर एक जगह encode होता है और दूसरी जगह नहीं। query के मान में ampersand को %26 होना होगा, नहीं तो लिंक गलत जगह टूट जाएगा। लिंक के path में वह बस एक अक्षर है।
अंग्रेज़ी के अलावा के अक्षर
बुनियादी अंग्रेज़ी से बाहर के अक्षर उनके UTF-8 bytes के रूप में encode होते हैं, और हर byte percent code में लिखा जाता है। café का é दो bytes C3 और A9 है, इसलिए वह %C3%A9 बनता है, और पूरा शब्द caf%C3%A9 हो जाता है।
एक सरल उदाहरण से नियम साफ़ होते हैं। text a b&c=d/é को component के रूप में encode करने पर a%20b%26c%3Dd%2F%C3%A9 बनता है। हर ऐसा अक्षर encode होता है जो सुरक्षित अक्षर, अंक या चिह्न नहीं है: space, ampersand, equals sign, slash और accent वाला अक्षर।
Component या पूरा URL
encoding के दो प्रकार एक कारण से हैं। component encoding हर आरक्षित अक्षर को डेटा मानती है। इसे एक मान के लिए इस्तेमाल करें, जैसे search term या लिंक के भीतर file name। "rock & roll" को search term के रूप में encode करने पर rock%20%26%20roll मिलता है, यानी ampersand मान के भीतर ही रहता है।
पूरे URL की encoding ढाँचे को बचाती है। https://example.com/a b को encode करने पर https://example.com/a%20b बनता है, और slashes व colon अपनी जगह रहते हैं। इसे पूरे पते के लिए इस्तेमाल करें जिसे सही बनाना है, किसी ऐसे मान के लिए नहीं जो लिंक के भीतर जाता है।
URL टूल में इसी वजह से Component और Full URL की सेटिंग है। Full URL decoding %26 और %3D जैसे encode किए गए ढाँचागत अक्षरों को भी वैसा ही रखती है, इसलिए decode के बाद भी लिंक काम करता है।
Plus signs और form data
वेब फ़ॉर्म एक अलग परंपरा मानते हैं। जब फ़ॉर्म form data के रूप में भेजा जाता है, तो space %20 के बजाय + लिखा जाता है। असली plus sign तब %2B लिखा जाता है। इसलिए form data में C++ tips वाला वाक्यांश C%2B%2B+tips बनता है, और सामान्य component encoding में C%2B%2B%20tips।
decoding में भी यही अंतर है। query string में + आम तौर पर space होता है। लिंक के path में + plus sign है। टूल + को space तभी मानता है जब form data के लिए space को + मानें चुना हो, इसलिए path के लिए और उन मानों के लिए इसे बंद रखें जहाँ plus sign असली हो।
लंबी query string पढ़ना
लिंक अक्सर question mark के बाद अपनी सेटिंग रखता है। यह उदाहरण देखें:
https://shop.example/search?q=red%20shirt&size=M&tag=summer%2Bsale
decode करने पर पता चलता है कि खोज red shirt की है, size M है, और tag summer+sale है। %2B plus sign ही रहता है क्योंकि वह encode किया गया था। लिंक को URL टूल में चिपकाएँ, तो वह decode के बाद हर नाम और मान की सूची दिखाता है, जिससे लंबा लिंक पढ़ना आसान हो जाता है। अगर आपको tracking सेटिंग के बिना छोटा पता चाहिए, तो पहले लिंक साफ़ करें।
दोबारा encode करना
सबसे आम गलती किसी मान को दो बार encode करना है। text %20 को दोबारा encode करने पर %2520 बनता है, क्योंकि percent चिह्न खुद %25 बन जाता है। फिर पेज मान में एक असली %20 ढूँढता है, और खोज या पेज मेल नहीं खाते। लिंक को एक बार decode करें, नतीजा जाँचें, और मान को तभी encode करें जब ज़रूरत हो।
टूटे escape
percent चिह्न के बाद दो hexadecimal अंक होने चाहिए, और accent वाले अक्षरों के लिए अंक सही UTF-8 बनाने चाहिए। कटा हुआ लिंक, या किसी text में गलती से टाइप किया गया percent चिह्न, %E0%A4%A जैसा टूटा escape छोड़ सकता है। टूल जितना decode कर सकता है करता है, टूटे bytes को ठीक वैसा ही छोड़ देता है, और बताता है कि कितने decode नहीं हो सके। वह पहली गलती पर नहीं रुकता।
खास स्थितियाँ
- हाथ से लिखे लिंक में space। browser का address bar space अपने आप encode कर देता है, लेकिन किसी दस्तावेज़ में कॉपी किए लिंक में कच्चे space अब भी हो सकते हैं। लिंक आगे भेजने से पहले उन्हें encode करें।
- अंग्रेज़ी के अलावा के domain names। इनके लिए punycode नाम की एक अलग व्यवस्था है, और path या query को encode करने से host name नहीं बदलता।
- आधा emoji। टूटी कॉपी में एक surrogate का आधा हिस्सा रह सकता है, जिसे encode नहीं किया जा सकता। टूल उसकी जगह replacement symbol लगाता है और बताता है कि उसने ऐसा किया।
- लिंक में Base64। लिंक में Base64 मान अपने नियम मानता है, जिसमें + और / की जगह - और _ होते हैं। देखें Base64 समझाया गया।
fixmint से कैसे करें
- text या लिंक टेक्स्ट या URL में चिपकाएँ।
- Encode या Decode चुनें, फिर एक मान के लिए Component, या पूरे पते के लिए Full URL चुनें।
- वेब फ़ॉर्म से कॉपी किए लिंक के लिए form data के लिए space की जगह + इस्तेमाल करें का निशान लगाएँ।
- लिंक के लिए Query parameters, decoded देखें, जिसमें हर नाम और मान दिखता है।
- नतीजा कॉपी करें।
त्वरित जवाब
%20 का क्या मतलब है?
एक space। उसका byte मान hexadecimal में 20 है।
मेरे लिंक में %20 की जगह + क्यों है?
लिंक शायद किसी फ़ॉर्म से आया है, जहाँ + space के लिए लिखा जाता है। "form data के लिए space की जगह + इस्तेमाल करें" विकल्प इसे decode कर देता है।
मेरे लिंक में %2520 क्यों दिखता है?
मान दो बार encode हुआ था। %20 का percent चिह्न दोबारा %25 में encode हो गया। एक बार decode करने पर %20 मिलेगा, और एक बार और करने पर space।
अंग्रेज़ी मूल से AI की मदद से अनुवादित।
टिप्पणियाँ
अभी कोई टिप्पणी नहीं। पहली टिप्पणी आप करें।


