我看到Django的urlencode
過濾器默認情況下不進行編碼的斜線:爲什麼Django的urlencode不能編碼斜槓?
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#urlencode
我知道我可以把它編碼的斜線,但爲何它沒有在默認情況下做到這一點?鑑於它是URL中的保留字符,對斜線進行編碼是不是被接受的行爲?
我看到Django的urlencode
過濾器默認情況下不進行編碼的斜線:爲什麼Django的urlencode不能編碼斜槓?
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#urlencode
我知道我可以把它編碼的斜線,但爲何它沒有在默認情況下做到這一點?鑑於它是URL中的保留字符,對斜線進行編碼是不是被接受的行爲?
從Django源代碼,urlencode
基本上是Django的urlquote
實用程序方法的一個包裝。根據源代碼中的註釋,urlquote
是一個UTF-8安全版本urllib.quote
。
所以urlencode
使用相同的默認值是Python的urllib.quote
,而且urllib.quote
不逃避斜線的原因可以在documentation發現:
使用XX%逃生替換字符串的特殊字符。字母, 數字和字符'_.-'從不引用。默認情況下,這個 函數用於引用URL的路徑部分。 可選的安全參數指定了不應引用的附加字符 - 其默認值爲'/'。
所以,原因是它逃離了路徑,而'/'
是一個完美的預期和有效的路徑。
讓我們看看一些用例! –
閱讀本文http://stackoverflow.com/questions/1957115/is-a-slash-equivalent-to-an-encoded-slash-2f-in-the-path-portion-of-a – catherine