代码之家  ›  专栏  ›  技术社区  ›  yellowcap

为什么urllib。作语法分析引号编码URL中的非保留字符?

  •  2
  • yellowcap  · 技术社区  · 7 年前

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

    在python中

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

    在Javascript中

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

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

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

    1 回复  |  直到 7 年前
        1
  •  6
  •   cowbert    2 年前

    截至 RFC 3986 ,括号为 reserved .

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

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

    如果您想将javascript与您展示的平台行为最低限度地匹配(您没有说明它符合哪个ECMAScript标准的哪一部分):

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