सामान्य प्रश्न5 मिनट का पठन

URL में स्पेस को एन्कोड करना: %20 बनाम + (कब किसका उपयोग करें)

%20 स्पेस कैरेक्टर के लिए मानक RFC 3986 percent-encoding है और इसे URL पाथ तथा अधिकांश संदर्भों में उपयोग किया जाना चाहिए। + चिह्न केवल application/x-www-form-urlencoded फ़ॉर्मैट में स्पेस को दर्शाता है, जिसका उपयोग HTML फ़ॉर्म सबमिशन और कुछ query string में होता है।

%20 का क्या अर्थ है?

%20 स्पेस कैरेक्टर (ASCII कोड 32, हेक्साडेसिमल 0x20) का percent-encoded रूप है, जैसा कि RFC 3986 में परिभाषित किया गया है। किसी भी URI के किसी भी हिस्से में स्पेस को दर्शाने का यह मानक तरीका है, जिसमें path segments, query strings, और fragment identifiers शामिल हैं।

जब आप किसी URL में %20 देखते हैं, तो इसका सीधा-सा मतलब है "यहाँ एक स्पेस है"। उदाहरण के लिए, https://example.com/my%20file.pdf "my file.pdf" नामक एक संसाधन को संदर्भित करता है। %20 को सभी web server, browser, और HTTP library सार्वभौमिक रूप से समझते हैं।

URL में + का क्या अर्थ है?

स्पेस को दर्शाने वाला + चिह्न application/x-www-form-urlencoded content type से आता है, जिसे फ़ॉर्म डेटा को एन्कोड करने के लिए HTML specification में परिभाषित किया गया था। जब कोई HTML फ़ॉर्म GET मेथड का उपयोग करके सबमिट किया जाता है, तो browser परिणामी query string में स्पेस को + के रूप में एन्कोड करता है।

उदाहरण के लिए, यदि आप किसी सर्च फ़ॉर्म में "hello world" टाइप करके सबमिट करते हैं, तो browser https://example.com/search?q=hello+world जैसा एक URL बनाता है। यहाँ + का अर्थ "स्पेस" है, लेकिन केवल इसलिए क्योंकि query string form-urlencoded फ़ॉर्मैट का उपयोग कर रही है।

यह ध्यान देना महत्वपूर्ण है कि application/x-www-form-urlencoded फ़ॉर्मैट के बाहर + का कोई विशेष अर्थ नहीं होता। /files/my+file.pdf जैसे किसी URL पाथ में + एक शाब्दिक प्लस चिह्न है, स्पेस नहीं। जिस फ़ाइल को संदर्भित किया जा रहा है उसका नाम वास्तव में "my+file.pdf" है।

मुख्य अंतर

मूलभूत अंतर वह specification है जिससे प्रत्येक संबंधित है। %20 को RFC 3986 (URIs) द्वारा परिभाषित किया गया है और यह URL में हर जगह काम करता है। +-को-स्पेस मानने वाली परंपरा को फ़ॉर्म डेटा के लिए HTML/WHATWG specification द्वारा परिभाषित किया गया है और यह केवल उन query strings में काम करती है जिन्हें स्पष्ट रूप से form-urlencoded डेटा के रूप में माना जाता है।

  • %20 paths, query strings, fragments, और सभी URI संदर्भों में काम करता है
  • + केवल application/x-www-form-urlencoded query strings में "स्पेस" का अर्थ रखता है
  • URL पाथ में + एक शाब्दिक प्लस चिह्न है, स्पेस नहीं
  • %20 हमेशा सुरक्षित है; + संदर्भ पर निर्भर करता है
  • यदि आप फ़ॉर्म डेटा में किसी शाब्दिक + को एन्कोड करते हैं, तो यह %2B बन जाता है

आपको किसका उपयोग करना चाहिए?

%20 का उपयोग करें जब आप प्रोग्रामेटिक रूप से URL बना रहे हों, REST API अनुरोध तैयार कर रहे हों, path segments एन्कोड कर रहे हों, या जब भी आप अनिश्चित हों। URIs में स्पेस के लिए यह सार्वभौमिक रूप से सही एन्कोडिंग है।

+ का उपयोग करें केवल तब जब आप जानबूझकर application/x-www-form-urlencoded डेटा तैयार कर रहे हों, जैसे HTML फ़ॉर्म सबमिशन की नकल करने वाली query strings बनाते समय, या जब कोई API स्पष्ट रूप से इस फ़ॉर्मैट की माँग करता हो।

अधिकांश आधुनिक API और framework query strings में %20 और + दोनों को स्वीकार करते हैं। हालाँकि, %20 का उपयोग अधिक portable है और अस्पष्टता से बचाता है, खासकर तब जब query string का उपयोग फ़ॉर्म सबमिशन के बाहर के संदर्भों में हो सकता है।

विभिन्न भाषाएँ स्पेस को कैसे संभालती हैं

विभिन्न प्रोग्रामिंग भाषाएँ और उनकी standard libraries स्पेस को एन्कोड करने के लिए डिफ़ॉल्ट रूप से %20 या + में से किसी एक का उपयोग कर सकती हैं। अपनी भाषा के डिफ़ॉल्ट व्यवहार को जानना आपको अप्रत्याशित स्थितियों से बचने में मदद करता है।

// JavaScript
encodeURIComponent('hello world');  // "hello%20world" (%20)
new URLSearchParams({q: 'hello world'}).toString();  // "q=hello+world" (+)

// query strings में %20 को बाध्य करने के लिए:
new URLSearchParams({q: 'hello world'}).toString().replace(/\+/g, '%20');
# Python
from urllib.parse import quote, quote_plus, urlencode

quote('hello world', safe='')    # "hello%20world" (%20)
quote_plus('hello world')        # "hello+world" (+)
urlencode({'q': 'hello world'})  # "q=hello+world" (डिफ़ॉल्ट रूप से +)

# %20 को बाध्य करने के लिए:
urlencode({'q': 'hello world'}, quote_via=quote)  # "q=hello%20world"
// PHP
rawurlencode('hello world');  // "hello%20world" (%20)
urlencode('hello world');     // "hello+world" (+)

// rawurlencode, RFC 3986 का अनुसरण करता है
// urlencode, application/x-www-form-urlencoded का अनुसरण करता है

संबंधित लेख

हमारे मुफ़्त टूल आज़माएँ