【问题标题】:How to escape a pipe ( | ) symbol for url_encode in python如何在python中为url_encode转义管道(|)符号
【发布时间】:2012-07-03 19:12:17
【问题描述】:

我在 python 中遇到了 urllib.url_encode 的问题。用一些代码解释投注:

>>> from urllib import urlencode
>>> params = {'p' : '1 2 3 4 5&6', 'l' : 'ab|cd|ef'}
>>> urlencode(params)
'p=1+2+3+4+5%266&l=ab%7Ccd%7Cef'

我想将管道('|')保留在 l 参数中。你能告诉我怎么做吗?

结果应该是

'p=1+2+3+4+5%266&l=ab|cd|ef'

PS:我不想手动将 URL 放在一起,而是使用 urlencode。

谢谢 -帕特

【问题讨论】:

  • 如果你需要那里的管道,你不是urlencoding,就这么简单。
  • urlencode 然后用|替换%7C
  • 所以你基本上是想进行 URL 编码,然后恢复部分编码?那你为什么要进行 URL 编码呢?在我看来,带有管道符号的 URL 会产生问题。 (stackoverflow.com/questions/11298404/…)

标签: python


【解决方案1】:

将映射对象或二元元组序列转换为 “百分比编码”字符串[...]

urlencode() 方法按预期运行。如果你想阻止编码,那么你可以先编码整个对象,然后用管道替换编码的字符。

>>> u = urlencode(params)
>>> u.replace('%7C', '|')
'p=1+2+3+4+5%266&l=ab|cd|ef'  

【讨论】:

  • 我想替换 |与\|或者在 urlencoding 之前应该使用的东西,但你的解决方案也可以。谢谢
  • 添加标准转义字符 `\` 将被转换为 %5C。解决它的唯一方法是在编码后替换它。
【解决方案2】:

在 Python 3 中更简单:

urllib.parse.urlencode(params, safe='|')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-24
    • 2014-07-09
    • 2021-01-12
    • 1970-01-01
    • 2021-09-06
    • 2018-07-24
    • 2013-03-21
    • 2017-03-08
    相关资源
    最近更新 更多