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

Why does urllib.parse.quote encode non reserved characters in urls?

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

在python

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

在Javascript

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

为什么编码url分量时python函数多了"strict"?

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

截至 RFC 3986, brackets are reserved

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

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

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

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