为什么urllib.parse.quote会在网址中编码非保留字符?

时间:2017-11-21 08:41:11

标签: python urllib url-encoding quote reserved

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

在python中

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

在Javascript中

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

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

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

1 个答案:

答案 0 :(得分:2)

截至RFC 3986,括号为reserved

通过default,Python将对quote()之外的传递给_.-/的每个字符进行百分比编码。但是,quote()是可调的。如果您想要严格的RFC 3986行为,请将safe设置为'~'

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

如果您希望最小化显示的javascript平台行为(您未说明它符合ECMAScript标准的哪个部分):

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