सभी लेख

URL Encode/Decode: लिंक में percent-encoding

देवनागरी में लिखा कोई भी टेक्स्ट — गूगल पर हिंदी सर्च या किसी सरकारी पोर्टल का पता — URL में सीधे नहीं जा सकता। हर अक्षर को पहले UTF-8 बाइट्स में और फिर %XX जैसे percent-encoding में बदलना पड़ता है।

एक अक्षर, नौ कैरेक्टर

देवनागरी का हर अक्षर UTF-8 में 3 बाइट लेता है, और हर बाइट %XX के रूप में लिखा जाता है — यानी सिर्फ एक अक्षर "क" एन्कोड होकर %E0%A4%95 बन जाता है, तीन बाइट यानी नौ कैरेक्टर। "दिल्ली" जैसा छोटा-सा शब्द भी एन्कोड होने पर 20 से ज़्यादा कैरेक्टर की लाइन बन जाता है, जिससे व्हाट्सएप पर शेयर किया गया लिंक असल से कहीं ज़्यादा लंबा दिखता है।

encodeURIComponent बनाम encodeURI

encodeURIComponent लगभग हर खास चिह्न को एन्कोड करता है — &, ?, =, / समेत — इसलिए यह किसी एक पैरामीटर की वैल्यू के लिए सही है, जैसे सर्च बॉक्स से ?q= में जाने वाला हिंदी टेक्स्ट। encodeURI इन ढांचागत चिह्नों को नहीं छेड़ता और पूरे URL को एन्कोड करने के लिए बना है।

एक आम गलती

अगर पूरी query string को encodeURIComponent से एन्कोड कर दिया जाए, तो पैरामीटरों को अलग करने वाले & और = भी %26 और %3D बन जाते हैं — नतीजा यह कि सर्वर को कई अलग पैरामीटर की जगह एक ही बड़ा, अपठनीय पैरामीटर मिलता है।

यह कब काम आता है

  • हिंदी सर्च टर्म या नाम को किसी query पैरामीटर में डालते समय।
  • व्हाट्सएप पर पहले से भरा हिंदी संदेश (text=) वाला लिंक बनाते समय।
  • डिबगिंग: सर्वर लॉग में दिखने वाले %E0%A4... को असली टेक्स्ट में बदलकर पढ़ना।

Edge case: डबल एन्कोडिंग

अगर पहले से एन्कोड हो चुके टेक्स्ट को दोबारा एन्कोड कर दिया जाए, तो % चिह्न खुद %25 बन जाता है और नतीजा अपठनीय कचरे जैसा दिखता है (%E0%A4%95 से %25E0%25A4%2595)। ऐसा तब होता है जब कोई फ्रेमवर्क पहले ही लिंक को एन्कोड कर देता है और डेवलपर उसी वैल्यू पर दोबारा encodeURIComponent चला देता है।

टूल आज़माएँ