为什么Django的`urlencode`不能编码斜杠?

时间:2013-02-06 00:10:15

标签: python django url urlencode

我看到Django的urlencode过滤器默认不对斜杠进行编码:

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

我知道我可以对斜杠进行编码,但为什么不默认呢?是不是接受了对斜杠进行编码的行为,因为它是URL中的保留字符?

2 个答案:

答案 0 :(得分:8)

从Django源代码,urlencode基本上是Django的urlquote实用程序方法的包装器。根据来源中的评论,urlquoteurllib.quote的UTF-8安全版本。

因此urlencode使用与python的urllib.quote相同的默认值,urllib.quote中找不到'/'不会转义斜杠的原因:

  

使用%xx转义替换字符串中的特殊字符。快报   数字和字符“_.-”从不引用。默认情况下,这个   function用于引用URL的路径部分。该   可选的安全参数指定应该的其他字符   不被引用 - 其默认值为'/'。

所以,原因是它正在逃避路径,{{1}}是路径中完全预期且有效的字符。

答案 1 :(得分:0)

要让 urlencode 也转义 Django 模板中的 /,请使用 {{ variable|urlencode:'' }}

说明:额外的可选参数告诉urlencode“安全”的字符集,其中默认值为'/',因此传递一个空字符串是告诉urlencode {{ 1}} 不安全,应该进行编码。