为什么 urllib.parse.quote 对 url 中的非保留字符进行编码?

yel*_*cap 4 python urllib reserved url-encoding quote

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

在Python中

>>> import urllib
>>> urllib.parse.quote('(a+b)')
... '%28a%2Bb%29'
Run Code Online (Sandbox Code Playgroud)

在 JavaScript 中

>>> encodeURIComponent('(a+b)')
... "(a%2Bb)"
Run Code Online (Sandbox Code Playgroud)

为什么python函数在对url组件进行编码时更加“严格”?

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

cow*_*ert 9

从RFC 3986开始,括号被保留

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

urllib.parse.quote(string, safe='~')
Run Code Online (Sandbox Code Playgroud)

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

urllib.parse.quote(string, safe='()')
Run Code Online (Sandbox Code Playgroud)