2011-11-03 10 views
7

हाल के एक प्रोजेक्ट में, मुझे एक बग की समस्या निवारण का आनंद मिला जिसमें छवियों को फ़ाइल नाम में रिक्त स्थान पर लोड नहीं किया गया था। मैंने सोचा "क्या एक साधारण मुद्दा है, मैं UrlEncode() यह करूँगा!" लेकिन, नहीं! बस UrlEncode() का उपयोग कर समस्या का समाधान नहीं किया।एएसपी.नेट में, UrlEncode() और UrlPathEncode() क्यों है?

नई समस्या HttpUtilities.UrlEncode() विधि plusses लिए रिक्त स्थान () बंद (+) बजाय%20 के ब्राउज़र की तरह चाहता था। तो file+image+name.jpg वापस नहीं मिलेगा जबकि file%20image%20name.jpg सही ढंग से मिला था।

शुक्र है, एक सहकर्मी ने मुझे HttpUtilities.UrlPathEncode() पर इंगित किया जो + की जगह रिक्त स्थान के लिए %20 का उपयोग करता है।

यूआरएल एन्कोडिंग को संभालने के दो तरीके क्यों हैं? ऐसे दो आज्ञाएं क्यों हैं जो इतनी अलग तरीके से व्यवहार करती हैं?

+0

या तो बेहतर समाधान के लिए http://stackoverflow.com/questions/602642/server-urlencode-vs-httputility-urlencode/603962#603962 देखें। –

+0

संभावित डुप्लिकेट: http://stackoverflow.com/q/4145823/2291 –

+0

@ मुफासा - mmm ... मुझे अंतर पता है। मैं सोच रहा हूँ क्यों। – quakkels

उत्तर

9

UrlEncode क्वेरीरीस्ट्रिंग के साथ उपयोग के लिए उपयोगी है क्योंकि ब्राउज़र GET विधि के साथ फ़ॉर्म सबमिट करते समय स्पेस के स्थान पर + का उपयोग करते हैं।

UrlPathEncode बस सभी अक्षर हैं जो किसी URL में नहीं किया जा सकता है, जैसे <, > और बदल देता है।

आपने URL UrlEncode विधि या UrlPathEncode विधि के साथ का उपयोग कर सांकेतिक शब्दों में बदलना कर सकते हैं:

दोनों MSDN लिंक इस उद्धरण शामिल हैं। हालांकि, विधियां अलग-अलग परिणाम देती हैं। UrlEncode विधि प्रत्येक स्पेस कैरेक्टर को प्लस कैरेक्टर (+) में परिवर्तित करता है। UrlPathEncode विधि प्रत्येक स्पेस कैरेक्टर को स्ट्रिंग "% 20" में परिवर्तित करती है, जो हेक्साडेसिमल नोटेशन में एक स्पेस का प्रतिनिधित्व करती है। UrlPathEncode विधि का उपयोग करें जब आप में किसी URL के पथ भाग को एन्कोड करते हैं, तो लगातार 0 डीप्लेटफ़ॉर्म या ब्राउज़र डिकोडिंग निष्पादित करता है।

+1

माइक्रोसॉफ्ट ने तब से कहा है कि 'UrlPathEncode() 'का उपयोग नहीं किया जाना चाहिए। यह ब्राउज़र अनुकूलता सुनिश्चित करने के लिए उपयोग की जाने वाली एक सहायक विधि है। विवरण के लिए अपना UrlPathEncode लिंक देखें। – Basic

+0

UrlEncode पथ के हिस्सों को एन्कोड करने के लिए उपयोग नहीं किया जा सका, क्योंकि + संकेत की अनुमति नहीं है। स्पष्टीकरण देखें: https://stackoverflow.com/a/29948396/991267 System.Uri.EscapeDataString विधि पथ भागों को एन्कोड करने के लिए उपयोग किया जा सकता है। –

2

तो एक यूआरएल में आपके पास पथ है और फिर एक? और फिर पैरामीटर (यानी http://some_path/page.aspx?parameters)। यूआरएल पथ यूआरएल पैरामीटर अलग-अलग जगहों को एन्कोड करते हैं, यही कारण है कि दो संस्करण हैं। लंबे समय तक रिक्त स्थान URL में मान्य नहीं थे, लेकिन पैरामीटर में थे।

दूसरे शब्दों में स्वरूपण यूआरएल समय के साथ बदल गया है। लंबे समय तक केवल एक यूआरएल में एएनएसआई वर्ण भी हो सकते हैं।