从 HTTP 中取消转义 Python 字符串

问题描述 投票:0回答:4

我从 HTTP 标头中获取了一个字符串,但它已被转义。我可以使用什么函数来转义它?

myemail%40gmail.com -> [email protected]

urllib.unquote() 是可行的方法吗?

python http header urllib2 mod-wsgi
4个回答
38
投票

我很确定 urllib 的

unquote
是执行此操作的常用方法。

>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'[email protected]'

还有

unquote_plus
:

与 unquote() 类似,但也用空格替换加号,这是取消引用 HTML 表单值所需的。


3
投票

在 Python 3 中,这些函数是

urllib.parse.unquote
urllib.parse.unquote_plus

后者用于 HTTP URL 中的查询字符串,其中空格字符 (

) 传统上编码为加号字符 (
+
),而
+
则按百分比编码为
%2B

除了这些之外,还有

unquote_to_bytes
将给定的编码字符串转换为
bytes
,当编码未知或编码数据是二进制数据时可以使用。不过没有
unquote_plus_to_bytes
,如果你需要的话,你可以这样做:

def unquote_plus_to_bytes(s):
    if isinstance(s, bytes):
        s = s.replace(b'+', b' ')
    else:
        s = s.replace('+', ' ')
    return unquote_to_bytes(s)

有关是否使用

unquote
unquote_plus
的更多信息,请访问 编码空格字符的 URL:+ 或 %20


2
投票

是的,看来

urllib.unquote()
完成了这项任务。 (我在键盘上针对您的示例进行了测试。)


0
投票

对之前答案的小修正(使用 python 3.11 测试)-

from urllib.parse import unquote
unquote('myemail%40gmail.com')
'[email protected]'
© www.soinside.com 2019 - 2024. All rights reserved.