如何在Python中对URL进行编码时转义管道符(|)?

16

我在使用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来处理。

谢谢 -Pat


如果您需要在其中使用管道符号,那么您就没有进行URL编码,就这么简单。 - Wrikken
11
将文本进行urlencode编码,然后将其中的"%7C"替换为"|"。 - TheZ
所以你基本上想要对URL进行编码,然后再恢复部分编码?为什么要进行URL编码呢?在我看来,带有管道符号的URL可能会引起问题。(https://dev59.com/dWXWa4cB1Zd3GeqPO6a3) - chiccodoro
2个回答

24

将映射对象或由两个元素组成的序列转换为“百分比编码”的字符串[...]

urlencode()方法按预期工作。如果想要防止编码,可以先对整个对象进行编码,然后将编码字符替换为管道符。

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

我认为在进行URL编码之前,用 | 或其他字符替换 | 应该可以解决问题,但是你的解决方案也可以。谢谢。 - wzr1337
添加标准转义字符 \\ 会被转换为 %5C。解决它的唯一方法是在编码后进行替换。 - Robert

2

在Python 3中更加简单:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接