2013-02-06 22 views
10

我看到Django的urlencode過濾器默認情況下不進行編碼的斜線:爲什麼Django的urlencode不能編碼斜槓?

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

我知道我可以把它編碼的斜線,但爲何它沒有在默認情況下做到這一點?鑑於它是URL中的保留字符,對斜線進行編碼是不是被接受的行爲?

+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實用程序方法的一個包裝。根據源代碼中的註釋,urlquote是一個UTF-8安全版本urllib.quote

所以urlencode使用相同的默認值是Python的urllib.quote,而且urllib.quote不逃避斜線的原因可以在documentation發現:

使用XX%逃生替換字符串的特殊字符。字母, 數字和字符'_.-'從不引用。默認情況下,這個 函數用於引用URL的路徑部分。 可選的安全參數指定了不應引用的附加字符 - 其默認值爲'/'。

所以,原因是它逃離了路徑,而'/'是一個完美的預期和有效的路徑。

相關問題