2013-03-05 6 views
5

के साथ% 20 को प्रतिस्थापित करता है मेरे वेब पेज में जब टेक्स्ट फ़ील्ड में फॉर्म के साथ फॉर्म जमा किया जाता है, तो इसे अंतरिक्ष के बजाए बैकएंड जावा कोड में% 20 के रूप में पढ़ा जा रहा है। मैं बैकएंड में% 20 को वापस ले सकता हूं लेकिन मुझे लगता है कि यह सही दृष्टिकोण नहीं है और यह एप्लिकेशन में कहीं भी हो सकता है।जावा यूआरएल पैराम स्पेस

क्या आप फ़ॉर्म जमा करते समय इसे आगे के अंत में संभालने का कोई बेहतर तरीका है?

+1

'% 20' प्राप्त करने में कुछ भी गलत नहीं है। आप कर सकते हैं: 'URL = URL.replaceAll ("% 20", ""); ' – Maroun

+1

url = url.value.replace ("% 20 "," "); –

+1

कोई बेहतर तरीका नहीं है। यह मानक HTTP वेब एन्कोडिंग है - आपको इसे इस प्रारूप में होना चाहिए। यह सही है। विवरण के लिए कृपया डब्ल्यू 3 सी से यह एन्कोडिंग दस्तावेज़ देखें। http://www.w3schools.com/tags/ref_urlencode.asp – ninnemannk

उत्तर

11

आपको लगता है कि जिस तरह से अपने बस% से 20 के लिए समस्या छँटाई नहीं कर रहे हैं एक URLDecoder के माध्यम से इसे पारित कर सकता है, लेकिन अन्य urlencoded महत्व देता http://docs.oracle.com/javase/7/docs/api/java/net/URLDecoder.html

+0

एफडीओ मुझे प्रत्येक यूआरएल अनुरोध के लिए इसे लागू करना होगा? – McQueen

+0

प्रत्येक फॉर्म जमा करने के लिए हाँ। –

16

उस के साथ कुछ भी गलत नहीं है। यह एक यूआरएल में कैरेक्टर से बच निकले हैं। आप URLDecoder का उपयोग करना चाहिए, जो विशेष रूप से उपयुक्त है, क्योंकि अपने नाम के बावजूद, यह application/x-www-form-urlencoded डिकोडिंग करता है:

String decoded = URLDecoder.decode(queryString, "UTF-8"); 

तो फिर तुम URL के क्वेरी भाग को पार्स कुंजी/मान जोड़े का एक नक्शा निर्माण करने के लिए सक्षम हो जाएगा , & पर विभाजित, और मूल्य से कुंजी को अलग करने के लिए = का उपयोग करके (जो null भी हो सकता है)।

हालांकि ध्यान दें कि यदि URL URI ऑब्जेक्ट के रूप में पारित किया गया है, तो इसका एक अच्छा getQuery() है जो पहले से ही अनचाहे टेक्स्ट लौटाता है।

यदि आप सर्वलेट एपीआई का उपयोग करते हैं, तो आपको कुछ भी बचने की ज़रूरत नहीं है क्योंकि getParameterMap() जैसी अच्छी विधियां हैं।

+0

संभावित रूप से सर्वर पक्ष पर उपयोग किए जाने वाले ढांचे को कुछ * पैरा * मानचित्र के नीचे उपलब्ध सब कुछ मिल जाता है। मेरे उदाहरण में यूटीएफ -8 कार्य करता है क्योंकि डिकोडर को पता होना चाहिए कि वर्णमाला '% 20' को संदर्भित किया गया है। "* वर्तमान यूआरएल अनुरोध पहले से ही यूटीएफ -8 * है" मुझे नहीं पता कि इसका क्या अर्थ है ... – Raffaele

+0

अनुरोध लाइन (जिसमें मेजबान के बाद भाग शामिल है) में केवल ASCII वर्णों का सबसेट हो सकता है। इसके अलावा, कुछ पात्र विशेष हैं और बच जाना चाहिए। इसके अलावा, श्वेतसूची के बाहर हर चरित्र को '% XX' का उपयोग करके बच जाना चाहिए - देखें [आरएफसी 23 9 6] (http://www.ietf.org/rfc/rfc2396.txt) – Raffaele

+0

कोई भी * यूटीएफ -8 वर्णमाला *। यूनिकोड सेट है, और यूटीएफ -8 एक एन्कोडिंग योजना है। मेरे उत्तर में उपयोग किए गए जावा एपीआई को ऑक्टेट्स से वर्ण बनाने की योजना की आवश्यकता होती है। – Raffaele

4
try { 
     String result = URLDecoder.decode(urlString, "UTF-8"); 
    } catch (UnsupportedEncodingException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
संबंधित मुद्दे