2011-01-27 17 views
27

मेरे पास कुछ क्वेरी टेक्स्ट है जो जावास्क्रिप्ट के साथ एन्कोड किया जा रहा है, लेकिन मुझे एक ऐसे केस का सामना करना पड़ा है जहां मुझे सर्वर की तरफ एक ही टेक्स्ट एन्कोड करना पड़ सकता है, और जो एन्कोडिंग हो रहा है वह नहीं है वही। मुझे यह वही होना चाहिए। यहां एक उदाहरण दिया गया है।यूआरएल एन्कोडिंग उद्धरण और रिक्त स्थान

मैं खोज बॉक्स में "I like food" दर्ज करता हूं और search बटन दबाता हूं। जावास्क्रिप्ट इसे %22I%20like%20food%22

मान लें कि मुझे सर्वर पक्ष पर अनुरोध ऑब्जेक्ट पर एक स्ट्रिंग के समान मान मिलता है। यह इस तरह दिखेगा: "\"I like food\""

जब मैं HttpUtility.UrlEncode(value) उपयोग करते हैं, परिणाम "%22I+like+food%22" है। अगर मैं HttpUtility.UrlPathEncode(value) उपयोग करते हैं, परिणाम "\"I%20like%20food\""

है तो UrlEncode मेरी उद्धरण एन्कोडिंग है, लेकिन रिक्त स्थान के लिए + चरित्र उपयोग कर रहा है। UrlPathEncode मेरी रिक्त स्थान एन्कोड कर रहा है लेकिन मेरे बच निकले उद्धरण एन्कोडिंग नहीं कर रहा है।

मैं वास्तव में, यह दोनों क्या करने की जरूरत अन्यथा खोजें कोड पूरी तरह से मुझ पर borks (और मैं खोज कोड पर कोई नियंत्रण नहीं)।

टिप्स?

+2

% 20 के साथ रिक्त स्थान बदलने के लिए एक स्ट्रिंग खोज/प्रतिस्थापन करें, फिर नियमित UrlEncode करें? –

+1

@Marc B: क्या यह UrlEncode को "%" वर्णों को एन्कोड नहीं करेगा (जिसके परिणामस्वरूप प्रत्येक स्थान के लिए% 2520)? UrlPathEncode का बहुत अजीब व्यवहार। कम से कम UrlEncode रिक्त स्थान से "+" में अपना रूपांतरण दस्तावेज करता है। UrlPathEncode sais उद्धरण परिवर्तित करने के बारे में कुछ भी नहीं है ... –

+1

हम्म। अच्छी बात। मुझे लगता है कि आप दूसरी तरफ जा सकते हैं, UrlEncode पहले, फिर% 20 के –

उत्तर

51

UrlPathEncode" बच नहीं है, क्योंकि वे पथ घटकों में भाग निकले किए जाने की जरूरत नहीं है।

Uri.EscapeDataString आप क्या चाहते हैं क्या करना चाहिए।

+2

धन्यवाद! अजीब है कि बहुत कम लोगों को इसके बारे में पता है। – Samo

+1

मैं सहमत हूं। इच्छा है कि Uri.EscapeDataPath का उपयोग/ज्ञान अधिक व्यापक था, क्योंकि यह वही था जो मुझे चाहिए था। –

9

आपके लिए कुछ विकल्प उपलब्ध हैं, सबसे तेज़ हो सकता है UrlEncode का उपयोग करना, फिर अक्षरों को %20 के साथ स्वैप करने के लिए string.replace करें।

कुछ

तरह
HttpUtility.UrlEncode(input).Replace("+", "%20"); 
+0

पर कनवर्ट करें। मैंने स्ट्रिंग प्रतिस्थापन विकल्प माना, लेकिन मुझे उम्मीद थी कि एक ऐसी विधि होगी जो वास्तव में सही तरीके से काम करेगी। ऐसा लगता है कि मुझे इस पर वापस गिरना होगा। बेशक, आपने कहा कि कुछ विकल्प हैं और आपने केवल एक सूचीबद्ध किया है ... मुझे दूसरों को देखने में दिलचस्पी होगी। धन्यवाद! – Samo

+1

मुझे उपयोगी सिस्टम मिला। Web.HttpUtility.UrlPathEncode (स्ट्रिंग स्ट्र); अंतरिक्ष – Jivan

+1

के लिए% 20 देने के लिए मुझे यह समाधान बिल्कुल पसंद नहीं है .. "% 20" के साथ "+" को प्रतिस्थापित करने से पाठ में रिक्त स्थान होने पर समस्याएं हल हो जाएंगी, लेकिन पाठ में "+" होने पर अन्य समस्याएं पैदा होंगी !! ! –

-1
WebUtility.UrlEncode(str) 

सभी वर्णों कि %XX प्रारूप का उपयोग कर, अंतरिक्ष सहित इनकोडिंग जरूरत सांकेतिक शब्दों में बदलना होगा।

+3

यह सिर्फ सादा गलत है और इसलिए भ्रामक है। 'WebUtility.UrlEncode' एक स्थान को' + ' – Coops

+2

में बदल देता है नोट: यह उत्तर ध्वजांकित किया गया था, और बाद में [समीक्षा कतार] (http://stackoverflow.com/review/low-quality-posts/16071767) में चला गया। इसे ध्वजांकित नहीं किया जाना चाहिए क्योंकि यह प्रश्न का उत्तर देने का प्रयास है। गलत उत्तरों का जवाब झुकाव नहीं, डाउनवोट करना है। –

संबंधित मुद्दे