13

我看到Django的urlencode过滤器默认不编码斜线:

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

我知道我可以让它对斜线进行编码,但是为什么默认不这样做呢?考虑到它是 URL 中的保留字符,对斜线进行编码不是可接受的行为吗?

4

2 回答 2

10

从 Django 源代码来看,urlencode它基本上是 Djangourlquote实用方法的包装器。从源代码中的评论来看,urlquote是 UTF-8 安全版本的urllib.quote.

urlencode使用与 python 相同的默认值也是如此,并且可以在文档urllib.quote中找到不转义斜杠的原因:urllib.quote

使用 %xx 转义符替换字符串中的特殊字符。从不引用字母、数字和字符“_.-”。默认情况下,此函数用于引用 URL 的路径部分。可选的安全参数指定不应该被引用的附加字符——它的默认值是'/'。

因此,原因是它正在转义路径,并且'/'是路径中完全预期且有效的字符。

于 2013-02-06T04:52:56.960 回答
1

要在 Django 模板中urlencode转义/,请使用{{ variable|urlencode:'' }}.

解释:额外的可选参数告诉字符urlencode集是“安全的”,默认是'/',所以传递一个空字符串是不安全的,应该被编码。urlencode/

于 2021-07-03T12:15:03.247 回答