2

中的parse函数urllib.parse可用于对 url 组件进行编码。但它的行为不同于标准的 javascript 编码器。

在蟒蛇

>>> import urllib
>>> urllib.parse.quote('(a+b)')
... '%28a%2Bb%29'

在Javascript中

>>> encodeURIComponent('(a+b)')
... "(a%2Bb)"

为什么编码url组件时python函数更“严格”?

如果我理解正确,括号不是 url 中的保留字符。所以我不明白为什么它们在 urllib 解析函数中被转义。

4

1 回答 1

5

RFC 3986开始,括号是保留的。

默认情况下,Python 将对传递给的每个字符进行百分比编码,quote()除了_.-/. 但是,quote()是可调的。如果您想要严格的 RFC 3986 行为,请设置safe'~'

urllib.parse.quote(string, safe='~')

如果您想最低限度地匹配您展示的 javascript-on-your-platform 的行为(您没有说明它符合哪个 ECMAScript 标准的部分):

urllib.parse.quote(string, safe='()')
于 2018-07-14T00:38:30.690 回答