【问题标题】:Why does urllib.parse.quote encode non reserved characters in urls?为什么 urllib.parse.quote 对 url 中的非保留字符进行编码?
【发布时间】:2017-11-21 08:41:10
【问题描述】:

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

在python中

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

在 Javascript 中

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

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

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

【问题讨论】:

    标签: python urllib url-encoding quote reserved


    【解决方案1】:

    截至RFC 3986,括号为reserved

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2012-04-07
      • 1970-01-01
      • 2011-01-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多