2009-07-31 11 views
94

एक यूआरएल में, क्या मुझे %20 या + का उपयोग करके रिक्त स्थान एन्कोड करना चाहिए? उदाहरण के लिए, निम्नलिखित उदाहरण में, कौन सा सही है?एक यूआरएल में, रिक्त स्थान% 20 या + का उपयोग करके एन्कोड किया जाना चाहिए?

www.mydomain.com?type=xbox%20360 
www.mydomain.com?type=xbox+360 

हमारी कंपनी के पूर्व करने के लिए झुकाव है, लेकिन "xbox 360" (और "UTF-8") returns the latter साथ जावा विधि URLEncoder.encode(String, String) का उपयोग कर।

तो, क्या अंतर है?

+4

%20? और + से पहले होना चाहिए: HttpUtility.UrlPathEncode '% का उपयोग करता है 20 'HttpUtility.UrlEncode' + 'का उपयोग करता है। स्रोत: http://msdn.microsoft.com/en-us/library/system.web.httputility.urlpathencode(v=vs.110).aspx – CodeToad

+3

@ मेटाबायटर मुझे लगता है कि यह वाक्यांश के लिए तकनीकी रूप से सही है " एक यूआरएल में, क्या मुझे URL * के क्वेरी भाग में% 20 या + * का उपयोग करके रिक्त स्थान एन्कोड करना चाहिए? " क्योंकि जब आपके द्वारा दिखाए गए उदाहरण में केवल क्वेरी भाग में रिक्त स्थान शामिल होते हैं, तो यह उन सभी पाठकों के लिए स्पष्ट नहीं हो सकता है जो उत्तर निर्भर करता है। वैकल्पिक रूप से आप प्रश्न को "इन * विशिष्ट यूआरएल उदाहरण * में जोड़ सकते हैं, क्या मुझे एन्कोड करना चाहिए ..." – Matt

उत्तर

5

यह मामले नहीं होना चाहिए, यदि आप अक्षर ए को एन्कोड किया गया है तो उससे अधिक 41 41 के रूप में।

हालांकि, अगर आप एक ऐसे सिस्टम से बात कर रहे हैं जो एक रूप को पहचान नहीं पाता है, ऐसा लगता है कि आपको इसे "स्पेक" कहने के बावजूद यह अपेक्षा करने की ज़रूरत है।

87

फॉर्म डेटा (जीईटी या पोस्ट के लिए) आमतौर पर application/x-www-form-urlencoded के रूप में एन्कोड किया जाता है: यह रिक्त स्थान के लिए + निर्दिष्ट करता है।

यूआरएल RFC 1738 के रूप में एन्कोड किए गए हैं जो %20 निर्दिष्ट करता है।

सिद्धांत रूप में मुझे लगता है कि आप ? और + के बाद से पहले 20% होना चाहिए: W3C के अनुसार

example.com/foo%20bar?foo+bar 
+9

ईमेल लिंक को छोड़कर, क्योंकि + es के बाद?परिणामस्वरूप वहां + ईएस के साथ खुलने वाले ईमेल होंगे। तो: 'mailto: [email protected]? Subject = I% 20need% 20help' – Sygmoral

43

(और वे इन बातों पर आधिकारिक स्रोत रहे हैं), क्वेरी स्ट्रिंग में एक अंतरिक्ष चरित्र (और केवल क्वेरी स्ट्रिंग में) को "%20" या "+" के रूप में एन्कोड किया जा सकता है। "सिफारिशें" के तहत "क्वेरी स्ट्रिंग्स" अनुभाग से:

क्वेरी स्ट्रिंग के भीतर, प्लस चिह्न किसी स्थान के लिए शॉर्टंड नोटेशन के रूप में आरक्षित है। इसलिए, असली प्लस संकेत एन्कोड किया जाना चाहिए। इस विधि का उपयोग क्वेरी यूआरआई को सिस्टम में पास करना आसान बनाने के लिए किया गया था, जो रिक्त स्थान की अनुमति नहीं देता था।

3,4:

RFC2396 जो सामान्य रूप में यूआरआई पर आधिकारिक विनिर्देश है की धारा 3.4 के अनुसार, "क्वेरी" घटक यूआरएल पर निर्भर है। क्वेरी घटक क्वेरी घटक संसाधन द्वारा व्याख्या की जाने वाली जानकारी की एक स्ट्रिंग है।

query   = *uric 

एक प्रश्न घटक के भीतर, वर्ण ",", "/", "?" ":", "@", "&" "=", "+", "" , और "$" आरक्षित हैं।

इसलिए यह अन्य सॉफ़्टवेयर में एक बग है यदि यह "+" अक्षरों के रूप में एन्कोड किए गए क्वेरी स्ट्रिंग में रिक्त स्थान वाले URL स्वीकार नहीं करता है।

आपके प्रश्न के तीसरे भाग के लिए, URLEncoder.encode() से आउटपुट को ठीक करने के लिए एक तरीका (हालांकि थोड़ा बदसूरत) callreplaceAll("\\+","%20") वापसी मूल्य पर है।

+0

URLEncoder का उपयोग करने के बजाय जो अनुप्रयोग/x-www-form-urlencoded को एन्कोड करता है, java.net.URI का उपयोग करें, जो सत्य में एन्कोड करता है प्रतिशत एन्कोडिंग। –

5

आप या तो उपयोग कर सकते हैं - जिसका अर्थ है कि अधिकांश लोग "+" चुनते हैं क्योंकि यह अधिक मानव पठनीय है।

0

क्वेरी मान एन्कोड करते समय, या तो फॉर्म, प्लस या प्रतिशत -20 मान्य है; हालांकि, चूंकि इंटरनेट की बैंडविड्थ अनंत नहीं है, इसलिए आपको प्लस का उपयोग करना चाहिए, क्योंकि यह दो कम बाइट्स है।

7

इस भ्रम क्योंकि URL अभी भी उदाहरण के लिए इस दिन

ले "http://www.google.com" करने के लिए 'टूट' जाता है। यह एक यूआरएल है। एक यूआरएल एक समान संसाधन लोकेटर है और वास्तव में एक वेब पेज (ज्यादातर मामलों में) के लिए एक सूचक है। यूआरएल वास्तव में 1994

में पहली विनिर्देश के बाद से एक बहुत ही अच्छी तरह से परिभाषित संरचना है हम "http://www.google.com" यूआरएल बारे में विस्तृत जानकारी निकाल सकते हैं:

+---------------+-------------------+ 
|  Part  |  Data   | 
+---------------+-------------------+ 
| Scheme  | http    | 
| Host address | www.google.com | 
+---------------+-------------------+ 

अगर हम एक को देखो

: अधिक जटिल यूआरएल ऐसे " https://bob:[email protected]:8080/file;p=1?q=2#third" के रूप में हम निम्न जानकारी निकाल सकते हैं
+-------------------+---------------------+ 
|  Part  |  Data   | 
+-------------------+---------------------+ 
| Scheme   | https    | 
| User    | bob     | 
| Password   | bobby    | 
| Host address  | www.lunatech.com | 
| Port    | 8080    | 
| Path    | /file    | 
| Path parameters | p=1     | 
| Query parameters | q=2     | 
| Fragment   | third    | 
+-------------------+---------------------+ 

आरक्षित वर्ण HTTP URL के लिए प्रत्येक भाग

के लिए अलग हैं, एक रास्ता टुकड़ा हिस्से में एक अंतरिक्ष "% 20" को एन्कोड करने की है (नहीं, बिल्कुल नहीं "+") , जबकि पथ में "+" वर्ण खंड खंड को अनएन्डेड छोड़ा जा सकता है।

अब क्वेरी भाग में, रिक्त स्थान के लिए या तो "+" इनकोडिंग जा सकता है: या "% 20" ( अनुकूलता पीछे की ओर का यूआरआई मानक में इसके लिए खोज करने की कोशिश नहीं करते हैं) है, जबकि "+" वर्ण (इस अस्पष्टता के परिणामस्वरूप) को "% 2 बी" से बचाना होगा।

इसका मतलब यह है "नीले + हल्का नीला" स्ट्रिंग पथ और क्वेरी भागों में अलग ढंग से एन्कोड किया जाना है: "http://example.com/blue+light%20blue?blue%2Blight+blue"। वहां से आप यूआरएल संरचना के सिंटैक्टिकल जागरूकता के बिना एक पूरी तरह से निर्मित यूआरएल एन्कोडिंग असंभव असंभव कर सकते हैं।

क्या यह करने पर निर्भर करता

आप के बाद

Source

.net डेवलपर्स के लाभ के लिए
+0

कृपया एकाधिक उत्तरों के लिए एक ही जवाब पोस्ट न करें। इसके बजाय, दूसरे को डुप्लिकेट के रूप में बंद करने के लिए वोट दें। –