2013-02-06 8 views
10

मुझे लगता है कि Django के urlencode फिल्टर डिफ़ॉल्ट रूप से स्लैश एन्कोड नहीं करता:Django का 'urlencode` स्लैश एन्कोड क्यों नहीं करता है?

https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#urlencode

मैं जानता हूँ कि मैं इसे स्लेश सांकेतिक शब्दों में बदलना कर सकते हैं, लेकिन क्यों यह यह डिफ़ॉल्ट रूप से नहीं करता है? स्लैश को एन्कोड करने के लिए यह स्वीकार्य व्यवहार नहीं है, बशर्ते कि यह यूआरएल में आरक्षित चरित्र है?

+0

चलिए कुछ उपयोग मामलों को देखते हैं! –

+1

इसे पढ़ें http://stackoverflow.com/questions/1957115/is-a-slash-equivalent-to-an-encoded-slash-2f-in-the-path-portion-of-a – catherine

उत्तर

7

Django स्रोत से, urlencode मूल रूप से Django की urlquote उपयोगिता विधि के आसपास एक रैपर है। स्रोत में टिप्पणियों से, urlquoteurllib.quote का यूटीएफ -8-सुरक्षित संस्करण है।

तो urlencode अजगर के urllib.quote, और कारण यह है कि urllib.quote स्लैश से बच नहीं करता है के रूप में ही चूक उपयोग कर रहा है documentation में पाया जा सकता:

% xx भागने का उपयोग कर स्ट्रिंग में विशेष वर्ण बदलें। पत्र, अंक, और वर्ण '_.-' कभी उद्धृत नहीं किए जाते हैं। डिफ़ॉल्ट रूप से, यह फ़ंक्शन यूआरएल के पथ खंड को उद्धृत करने के लिए है। वैकल्पिक सुरक्षित पैरामीटर अतिरिक्त वर्ण निर्दिष्ट करता है जो उद्धृत नहीं किया जाना चाहिए - इसका डिफ़ॉल्ट मान '/' है।

तो, कारण यह है कि यह पथ से बच रहा है, और '/' पथ के भीतर एक पूरी तरह से अपेक्षित और मान्य चरित्र है।

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