URL में कोई स्थान कब एन्कोड किया गया है +
, और इसे कब एन्कोड किया गया है %20
?
URL में कोई स्थान कब एन्कोड किया गया है +
, और इसे कब एन्कोड किया गया है %20
?
जवाबों:
से विकिपीडिया (जोर और लिंक जोड़ा):
जब HTML प्रपत्रों में दर्ज किया गया डेटा सबमिट किया जाता है, तो फॉर्म फ़ील्ड के नाम और मान एनकोड किए जाते हैं और एक HTTP अनुरोध संदेश में सर्वर को GET या POST, या, ऐतिहासिक रूप से, ईमेल के माध्यम से भेजा जाता है। डिफ़ॉल्ट रूप से उपयोग की जाने वाली एन्कोडिंग सामान्य URI प्रतिशत-एन्कोडिंग नियमों के एक बहुत ही प्रारंभिक संस्करण पर आधारित है, जिसमें कई संशोधनों जैसे कि नईलाइन सामान्यीकरण और "% 20" के बजाय "+" के साथ रिक्त स्थान की जगह है। MIME प्रकार का डेटा एन्कोडेड इस तरह से अनुप्रयोग / x-www-form-urlencoded है, और इसे वर्तमान में HTML (और एक्सफ़ॉर्म) विनिर्देशों में परिभाषित किया गया है (अभी भी बहुत पुराने तरीके से)।
इसलिए, URL में डेटा बनाते समय वास्तविक प्रतिशत एन्कोडिंग का उपयोग %20
संशोधित रूप में होता है +
। तो आप सबसे अधिक संभावना केवल +
एक के बाद क्वेरी स्ट्रिंग में URL में देख सकते हैं ?
।
multipart/form-data
माइम एन्कोडिंग का उपयोग करता है; यूआरआई का उपयोग application/x-www-form-urlencoded
करता है +
और ठीक से एन्कोड किया गया है %20
।
http://www.bing.com/search?q=hello+world
और नाम में जगह के साथ एक संसाधन हैhttp://camera.phor.net/cameralife/folders/2012/2012-06%20Pool%20party/
mailto:support@example.org?subject=I%20need%20help
। यदि आपने कोशिश की कि + के साथ, रिक्त स्थान के बजाय ईमेल + es के साथ खुल जाएगा।
यह भ्रम इसलिए है क्योंकि URL आज भी 'टूटे हुए' हैं।
उदाहरण के लिए " http://www.google.com " लें । यह एक URL है। एक URL एक यूनिफ़ॉर्म रिसोर्स लोकेटर है और वास्तव में एक वेब पेज (ज्यादातर मामलों में) का सूचक है। 1994 में पहले विनिर्देशन के बाद से URL में वास्तव में एक बहुत अच्छी तरह से परिभाषित संरचना है।
हम " http://www.google.com " URL के बारे में विस्तृत जानकारी निकाल सकते हैं :
+---------------+-------------------+
| Part | Data |
+---------------+-------------------+
| Scheme | http |
| Host | www.google.com |
+---------------+-------------------+
यदि हम एक अधिक जटिल URL देखते हैं जैसे:
" https: // bob: bobby@www.lunatech.com: 8080 / फ़ाइल; पी = 1? q = 2 " तीसरा "
हम निम्नलिखित जानकारी निकाल सकते हैं:
+-------------------+---------------------+
| Part | Data |
+-------------------+---------------------+
| Scheme | https |
| User | bob |
| Password | bobby |
| Host | www.lunatech.com |
| Port | 8080 |
| Path | /file;p=1 |
| Path parameter | p=1 |
| Query | q=2 |
| Fragment | third |
+-------------------+---------------------+
https://bob:bobby@www.lunatech.com:8080/file;p=1?q=2#third
\___/ \_/ \___/ \______________/ \__/\_______/ \_/ \___/
| | | | | | \_/ | |
Scheme User Password Host Port Path | | Fragment
\_____________________________/ | Query
| Path parameter
Authority
आरक्षित वर्ण प्रत्येक भाग के लिए अलग-अलग हैं।
HTTP URL के लिए, पथ के टुकड़े वाले हिस्से में एक स्थान को "% 20" (नहीं, बिल्कुल नहीं "+") को इनकोड करना होगा, जबकि पथ के टुकड़े वाले भाग में "+" वर्ण को अनएन्कोड किया जा सकता है।
अब क्वेरी भाग में, रिक्त स्थान को "+" (पीछे की संगतता के लिए: यूआरआई मानक में इसके लिए खोज करने की कोशिश नहीं की जा सकती) या "% 20" जबकि "+" वर्ण (इस अस्पष्टता के परिणामस्वरूप) ) को "% 2B" से बचना होगा।
इसका मतलब है कि "ब्लू + लाइट ब्लू" स्ट्रिंग को पथ और क्वेरी भागों में अलग-अलग एन्कोड किया जाना है:
" http://example.com/blue+light%20blue?blue%2Blight+blue "।
वहाँ से आप यह अनुमान लगा सकते हैं कि URL संरचना की एक क्रमिक जागरूकता के बिना पूरी तरह से निर्मित URL को एन्कोडिंग असंभव है।
यह करने के लिए नीचे फोड़े:
आपके पास %20
पहले ?
और +
बाद में होना चाहिए ।
key1=value1&key1=value2
जहां कुंजियाँ और मान जो भी नियमों encodeURIComponent
का पालन करते हैं, लेकिन AFAIK क्वेरी भाग की सामग्री पूरी तरह से ऐप पर 100% है। अन्य तो यह केवल पहली बार जाता है #
कोई आधिकारिक एन्कोडिंग नहीं है।
मैं सिफारिश करूंगा %20
।
क्या आप उन्हें हार्ड-कोडिंग कर रहे हैं?
यह बहुत सारी भाषाओं के अनुरूप नहीं है, हालाँकि। अगर मैं गलत नहीं हूँ, PHP में urlencode()
रिक्त स्थान के रूप में व्यवहार करता है +
जबकि पायथन urlencode()
उनके रूप में व्यवहार करता है %20
।
संपादित करें:
ऐसा लगता है कि मैं गलत हूं। पायथन की urlencode()
(कम से कम 2.7.2 में) के quote_plus()
बजाय का उपयोग करता है quote()
और इस प्रकार रिक्त स्थान को "+" के रूप में एन्कोड करता है। ऐसा भी लगता है कि W3C की अनुशंसा यहाँ के अनुसार "+" है: http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1
और वास्तव में, आप पायथन के अपने इश्यू ट्रैकर पर इस दिलचस्प बहस का अनुसरण कर सकते हैं कि रिक्त स्थान का उपयोग करने के लिए क्या है: http://bugs.python.org/issue13866 ।
EDIT # 2:
मैं समझता हूं कि एन्कोडिंग का सबसे आम तरीका "" के रूप में "+" है, लेकिन सिर्फ एक नोट, यह सिर्फ मेरे लिए हो सकता है, लेकिन मुझे यह थोड़ा भ्रमित लगता है:
import urllib
print(urllib.urlencode({' ' : '+ '})
>>> '+=%2B+'
URLEncoder.encode()
जावा में विधि इसे भी रूपांतरित करती है +
।
किसी URL के "एप्लिकेशन / x-www-form-urlencoded" सामग्री-प्रकार की-वैल्यू जोड़े क्वेरी भाग में केवल एक स्थान "+" को एन्कोड किया जा सकता है। मेरी राय में, यह एक MAY है, MUST नहीं है। शेष URL में, इसे% 20 के रूप में एन्कोड किया गया है।
मेरी राय में, URL के क्वेरी भाग में भी "+" के रूप में% 20 के रूप में रिक्त स्थान को हमेशा एनकोड करना बेहतर है, क्योंकि यह HTML विनिर्देशन (RFC-1866) है जो निर्दिष्ट करता है कि अंतरिक्ष वर्णों को एन्कोड किया जाना चाहिए " + "इन-एप्लिकेशन / x-www-form-urlencoded" सामग्री-प्रकार की-वैल्यू जोड़े (पैराग्राफ 8.2.1 देखें। सबपर पैरा 1)।
प्रपत्र डेटा एन्कोडिंग का यह तरीका बाद के HTML विनिर्देशों में भी दिया गया है। उदाहरण के लिए, HTML 4.01 विशिष्टता में एप्लिकेशन / x-www-form-urlencoded के बारे में प्रासंगिक पैराग्राफ देखें, और इसी तरह।
यहां URL में एक नमूना स्ट्रिंग है जहां HTML विनिर्देश प्लस के रूप में एन्कोडिंग रिक्त स्थान की अनुमति देता है: " http://example.com/over/there?name=foo+bar "। तो, केवल "?" के बाद, रिक्त स्थान को प्लसस द्वारा प्रतिस्थापित किया जा सकता है । अन्य मामलों में, रिक्त स्थान को 20% तक एन्कोड किया जाना चाहिए। लेकिन चूंकि संदर्भ को सही ढंग से निर्धारित करना कठिन है, इसलिए रिक्त स्थान को कभी भी "+" के रूप में एनकोड करना सबसे अच्छा अभ्यास है।
मैं RFC-3986, p.2.3 में परिभाषित "अनारक्षित" को छोड़कर सभी वर्णों को प्रतिशत-सांकेतिक शब्दों में बदलना चाहूंगा
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
कार्यान्वयन उस प्रोग्रामिंग भाषा पर निर्भर करता है जिसे आपने चुना था।
यदि आपके URL में राष्ट्रीय वर्ण हैं, तो पहले उन्हें UTF-8 में एन्कोड करें और फिर प्रतिशत-परिणाम को एनकोड करें।