किसी टेक्स्ट को URL encode करने का मतलब है: जो भी कैरेक्टर साधारण अंग्रेज़ी अक्षर, अंक या - . _ ~ में से नहीं है, उसे % और उसके हर UTF-8 बाइट की दो अंकों वाली hex वैल्यू से बदल देना। स्पेस %20 (या query string में +) बन जाता है, & बनता है %26, और नमस्ते जैसा एक शब्द 54 कैरेक्टर का %E0%A4%A8%E0%A4%AE%E0%A4%B8%E0%A5%8D%E0%A4%A4%E0%A5%87 बन जाता है। सबसे तेज़ तरीका है हमारे फ्री URL एनकोडर में टेक्स्ट पेस्ट करके नतीजा कॉपी करना। यह फ्री है, कोई अकाउंट नहीं चाहिए और किसी भी ब्राउज़र में चलता है। असली मुश्किल यह जानना है कि क्या encode करना है और जहाँ आप लिंक लगा रहे हैं वहाँ कौन-सा तरीका चाहिए। यह गाइड इसी के बारे में है।
नीचे दिए सारे आउटपुट असली हैं: हमने 1 नवंबर 2026 को My Botsy के लाइव टूल में इनपुट चलाए और उन्हीं स्ट्रिंग्स को JavaScript (Node.js 24), Python 3.13 और PHP से मिलाकर देखा।
URL encode कैसे करें, स्टेप बाय स्टेप
- सिर्फ़ वैल्यू अलग करें। केवल वही डेटा encode करें जो URL के अंदर जाएगा, जैसे सर्च टर्म, फ़ाइल का नाम या redirect का पता। पूरा पता कभी नहीं (वजह नीचे है)।
- एनकोडर में पेस्ट करें। URL एनकोडर खोलें, वैल्यू पेस्ट करें और Submit दबाएँ।
- नतीजा कॉपी करें। कॉपी बटन इस्तेमाल करें। स्पेस
+के रूप में आते हैं, जो query string के लिए सही है। - Path में हो तो %20 लगाएँ। अगर वैल्यू path का हिस्सा है (
?से पहले), तो हर+को%20से बदल दें। यह सुरक्षित है, क्योंकि आपके टेक्स्ट का असली प्लस पहले से%2Bबन चुका होता है। - जाँच लें। तैयार लिंक को URL पार्सर में डालें। यह हर पैरामीटर को decode करके दिखाता है कि सर्वर को ठीक-ठीक क्या मिलेगा।
अभी आज़माएँ: स्पेस, हिंदी शब्द या & वाला कोई भी टेक्स्ट फ्री URL एनकोडर में डालें और एक सेकंड में लिंक के लिए सुरक्षित वर्शन पाएँ।
किन कैरेक्टर्स को encode करना ज़रूरी है
RFC 3986, यानी URL को परिभाषित करने वाला स्टैंडर्ड, कैरेक्टर्स को तीन समूहों में बाँटता है:
- Unreserved, कभी encode नहीं होते:
A–Z a–z 0–9 - . _ ~। देवनागरी का कोई भी अक्षर इस सूची में नहीं है। - Reserved, जिनका URL में काम है:
: / ? # [ ] @ ! $ & ' ( ) * + , ; =। जब ये आपके डेटा का हिस्सा हों तो इन्हें encode करना पड़ता है। सर्च टर्म में बिना encode किया&नया पैरामीटर शुरू कर देता है और आपकी वैल्यू आधी कट जाती है। - बाकी सब: स्पेस, कोट्स,
< >,%, एक्सेंट वाले अक्षर, इमोजी और हर गैर-लैटिन लिपि। ये हमेशा UTF-8 से बाइट-दर-बाइट encode होते हैं। देवनागरी का हर अक्षर या मात्रा 3 बाइट लेती है, इसलिएदिवाली ऑफ़रबन जाता है%E0%A4%A6%E0%A4%BF%E0%A4%B5%E0%A4%BE%E0%A4%B2%E0%A5%80+%E0%A4%91%E0%A4%AB%E0%A4%BC%E0%A4%B0। यही वजह है कि हिंदी विकिपीडिया जैसे पेज का लिंक कॉपी करने पर अक्सर%E0%A4...से भरा लंबा पता मिलता है।
असली टेस्ट: जाल से भरी एक स्ट्रिंग
हमने जान-बूझकर ऐसा इनपुट चुना जिसमें लगभग हर समस्या है:
Café & Bar #1 / 50% off? a+b=c ~ü 東京 Tom's "best" <b>
URL एनकोडर ने यह लौटाया:
Caf%C3%A9+%26+Bar+%231+%2F+50%25+off%3F+a%2Bb%3Dc+%7E%C3%BC+%E6%9D%B1%E4%BA%AC+Tom%27s+%22best%22+%3Cb%3E
| इनपुट | आउटपुट | क्यों ज़रूरी |
|---|---|---|
| स्पेस | + | फ़ॉर्म वाला फ़ॉर्मेट, query में मान्य |
& | %26 | वरना नया पैरामीटर शुरू हो जाता |
# | %23 | वरना आगे का हिस्सा fragment बन जाता, जो सर्वर तक पहुँचता ही नहीं |
% | %25 | वरना 50% o टूटा हुआ escape माना जाता |
+ | %2B | वरना सर्वर इसे स्पेस पढ़ता |
é, ü | %C3%A9, %C3%BC | हर एक के दो UTF-8 बाइट |
~ | %7E | ज़रूरी नहीं, पर नुकसान भी नहीं: सर्वर दोनों रूप मानते हैं |
' " < > | %27 %22 %3C %3E | डेटा के रूप में बचे रहते हैं, हटाए नहीं जाते |
यह आउटपुट बाइट-दर-बाइट वही है जो ब्राउज़र का URLSearchParams उसी टेक्स्ट के लिए बनाता है, और वही जो PHP का urlencode() देता है, जिसे यह टूल इस्तेमाल करता है। यानी यहाँ encode की गई वैल्यू ठीक वैसे ही काम करती है जैसे किसी वेब फ़ॉर्म से भेजी गई वैल्यू।
%20 या +: स्पेस के लिए कौन-सा सही है?
दोनों का मतलब "स्पेस" है, पर अलग-अलग जगहों पर। %20 RFC 3986 की सामान्य percent-encoding है और URL में हर जगह चलती है। + HTML फ़ॉर्म के फ़ॉर्मेट (application/x-www-form-urlencoded) से आया है और सिर्फ़ query string के अंदर स्पेस माना जाता है। Path में + असली प्लस है: /files/my+report.pdf ऐसी फ़ाइल माँगता है जिसके नाम में प्लस हो।
- Query की वैल्यू (
?q=red+shoes):+या%20, दोनों चलते हैं। - Path के हिस्से (
/docs/my%20report): सिर्फ़%20। mailto:लिंक:%20। mailto का स्टैंडर्ड (RFC 6068) कहता है कि स्पेस%20लिखे जाएँ, क्योंकि+को असली प्लस से अलग नहीं पहचाना जा सकता, जैसेpriya+news@example.orgमें। इसीलिए हमारा mailto लिंक जनरेटर%20लिखता है; बाकी बातें हमारी mailto लिंक गाइड में हैं।
कोड में कौन-सा फ़ंक्शन इस्तेमाल करें
हमने वही टेस्ट स्ट्रिंग आम फ़ंक्शंस से चलाई। ये चार बातों पर अलग नतीजे देते हैं: स्पेस, /, ~ और '।
| फ़ंक्शन | स्पेस | / | ~ | ' | & # ? को वैसे ही छोड़ता है? |
|---|---|---|---|---|---|
JS encodeURIComponent | %20 | %2F | ~ | ' | नहीं |
JS encodeURI | %20 | / | ~ | ' | हाँ |
JS URLSearchParams | + | %2F | %7E | %27 | नहीं |
Python quote() | %20 | / | ~ | %27 | नहीं |
Python quote_plus() | + | %2F | ~ | %27 | नहीं |
PHP rawurlencode() | %20 | %2F | ~ | %27 | नहीं |
PHP urlencode() / हमारा टूल | + | %2F | %7E | %27 | नहीं |
इनमें से दो अक्सर धोखा देते हैं। encodeURI पूरे URL के लिए बना है, इसलिए यह &, #, ?, = और + को नहीं छूता। किसी वैल्यू पर लगाने से Café & Bar #1 बनता है Caf%C3%A9%20&%20Bar%20#1, और लिंक & और # पर टूट जाता है। Python का quote() डिफ़ॉल्ट रूप से / नहीं बदलता, इसलिए /cart?id=7 जैसे redirect में स्लैश बचा रहता है, जब तक आप safe='' न दें। एक अकेली वैल्यू के लिए encodeURIComponent, quote(value, safe='') या rawurlencode इस्तेमाल करें।
उदाहरण: एक URL के अंदर दूसरा URL
लॉगिन पेज को यूज़र को बाद में /cart?id=7 पर वापस भेजना है। अगर आप /login?next=/cart?id=7 लिखते हैं, तो दूसरा ? और आगे का कोई भी & सर्वर को उलझा देता है। पहले अंदर वाला URL encode करें:
/login?next=%2Fcart%3Fid%3D7
तैयार लिंक जाँचने के लिए हमने https://shop.example/search?q=caf%C3%A9+%26+bar&next=%2Fcart%3Fid%3D7 को URL पार्सर में डाला। उसने raw query दिखाई और फिर decode किए गए पैरामीटर, ठीक वैसे जैसे सर्वर को मिलते हैं:
{ "q": "café & bar", "next": "/cart?id=7" }
दो साफ़ वैल्यू, कोई फ़ालतू पैरामीटर नहीं। कैंपेन लिंक भी ऐसे ही काम करते हैं: हर UTM वैल्यू एक पैरामीटर है, इसलिए उसे encode करें, या बेहतर है कि सिर्फ़ छोटे अक्षर और अंडरस्कोर रखें, जैसा हमारी UTM पैरामीटर गाइड सुझाती है।
URL encoding की आम गलतियाँ
पूरा URL encode कर देना
https://mybotsy.com/?q=red shoes को encode करने पर मिलता है https%3A%2F%2Fmybotsy.com%2F%3Fq%3Dred+shoes, जो अब काम करने वाला लिंक नहीं है। यह तभी सही है जब पूरा URL खुद किसी पैरामीटर की वैल्यू हो, जैसे ऊपर वाले redirect में।
दो बार encode करना
पहले से encode किए टेक्स्ट को दोबारा encode करने पर प्रतिशत के निशान भी encode हो जाते हैं। हमने a%20b टेस्ट किया और मिला a%2520b। लिंक में %25 के बाद दो hex अंक दिखें तो समझिए दो बार encode हुआ है। %25252F को / तक पहुँचने में तीन बार decode करना पड़ता है (%252F, फिर %2F, फिर /)।
Decode करते समय प्लस खो देना
फ़ॉर्म-स्टाइल decoder, जिसमें हमारा URL डिकोडर भी है, + को स्पेस बना देते हैं। हमने q=mac+cheese&phone=%2B54+11+5555&path=%2Fdocs%2520v2 decode किया और मिला q=mac cheese&phone=+54 11 5555&path=/docs%20v2। देश का कोड इसलिए बचा क्योंकि उसका प्लस %2B लिखा था; बिना encode किया +91 स्पेस बन जाता। यही समस्या URL में Base64 वैल्यू को भी बिगाड़ती है। इससे बचाने वाले URL-safe alphabet के बारे में Base64 decode कैसे करें में पढ़ें।
पुराने Latin-1 escape को UTF-8 के साथ मिलाना
कुछ पुराने सिस्टम é को %C3%A9 की जगह %E9 (एक Latin-1 बाइट) लिखते हैं। UTF-8 में decode करने पर caf%E9 दिखता है caf�। अगर यह replacement कैरेक्टर दिखे, तो स्रोत पुरानी encoding इस्तेमाल कर रहा था।
अपने-आप होने वाली trimming पर भरोसा
हमारा एनकोडर शुरुआत और आखिर के स्पेस हटा देता है: " hello world" + नई लाइन + "line 2 " का नतीजा आया hello+world%0D%0Aline+2। आमतौर पर यही चाहिए, पर अगर शुरुआती स्पेस मायने रखता है तो %20 खुद जोड़ें। ब्राउज़र में टाइप की गई नई लाइन %0D%0A बनती है।
JavaScript में अकेला %
decodeURIComponent("50%") देता है URIError: URI malformed। हमारा डिकोडर अकेले % को वैसे ही छोड़ देता है (50% off वैसा ही रहता है): गड़बड़ डेटा में काम का है, पर यह चेतावनी भी नहीं देता।
जुड़े हुए फ्री टूल
- URL डिकोडर:
%20,%26और%E0%A4%A8को वापस टेक्स्ट में बदलता है। - URL पार्सर: लिंक को host, path और decode किए पैरामीटर में बाँटता है।
- UTM लिंक जनरेटर: पहले से encode की गई वैल्यू वाले कैंपेन लिंक बनाता है।
- WhatsApp लिंक जनरेटर: पहले से लिखे मैसेज वाले wa.me लिंक (देखें हमारी WhatsApp लिंक गाइड)।
- स्लग जनरेटर: अगर URL आपके हाथ में है, तो साफ़ slug encoding की ज़रूरत ही खत्म कर देता है (SEO-फ्रेंडली URL slug कैसे बनाएँ)।
ये सभी फ्री हैं और किसी अकाउंट की ज़रूरत नहीं। विज़िटर दिन में 5 बार टूल इस्तेमाल कर सकते हैं, और फ्री My Botsy अकाउंट (100% फ्री, कोई स्पैम नहीं) यह सीमा हटा देता है।
अक्सर पूछे जाने वाले सवाल
URL encoding क्या है?
URL encoding, जिसे percent-encoding भी कहते हैं, URL में मना या खास मतलब वाले कैरेक्टर्स को % और हर बाइट की दो अंकों वाली hex वैल्यू से बदल देती है। स्पेस %20 बनता है, & बनता है %26, और हर देवनागरी अक्षर तीन बाइट यानी नौ कैरेक्टर बनता है।
URL में स्पेस %20 हो या +?
Query string के अंदर दोनों चलते हैं, क्योंकि वहाँ + फ़ॉर्म वाला स्पेस है। Path या mailto लिंक में %20 इस्तेमाल करें, क्योंकि वहाँ + असली प्लस है। हमारा एनकोडर + देता है, इसलिए path के लिए उसे %20 से बदलें।
किन कैरेक्टर्स को encode करने की ज़रूरत नहीं है?
सिर्फ़ अंग्रेज़ी अक्षर A से Z और a से z, अंक 0 से 9, और चार चिह्न - . _ ~। & ? # = / + : जैसे reserved कैरेक्टर डेटा का हिस्सा हों तो encode होते हैं, और बाकी सब (स्पेस, कोट्स, हिंदी अक्षर, इमोजी) हमेशा encode होता है।
encodeURI और encodeURIComponent में क्या फ़र्क है?
encodeURI पूरे URL के लिए है और & # ? = और / जैसे ढाँचे वाले कैरेक्टर्स को नहीं छूता। encodeURIComponent एक अकेली वैल्यू के लिए है और इन्हें भी encode करता है। सर्च टर्म या redirect पर encodeURI लगाने से लिंक पहले & या # पर टूट जाता है।
मेरे लिंक में %2520 क्यों दिख रहा है?
वह दो बार encode हुआ है: पहली बार स्पेस %20 बना और दूसरी बार % बन गया %25। एक बार decode करें और मूल टेक्स्ट को सिर्फ़ एक बार encode करें।
क्या URL एनकोडर फ्री है?
हाँ। My Botsy का URL एनकोडर फ्री है, कोई अकाउंट नहीं चाहिए और किसी भी ब्राउज़र में चलता है। विज़िटर दिन में 5 बार इस्तेमाल कर सकते हैं, और फ्री अकाउंट यह सीमा हटा देता है।
किसी लिंक में कोई वैल्यू डालनी है? उसे फ्री URL एनकोडर में पेस्ट करें, नतीजा कॉपी करें और तैयार लिंक को URL पार्सर से जाँच लें।