来自HTTP的Unescape Python字符串

时间:2009-04-23 04:36:56

标签: python http header urllib2 mod-wsgi

我有一个来自HTTP标头的字符串,但它已被转义..我可以用什么功能来取消它?

myemail%40gmail.com -> myemail@gmail.com

urllib.unquote()是否可行?

3 个答案:

答案 0 :(得分:35)

我很确定urllib的unquote是执行此操作的常用方法。

>>> import urllib
>>> urllib.unquote("myemail%40gmail.com")
'myemail@gmail.com'

还有unquote_plus

  

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

答案 1 :(得分:2)

是的,似乎urllib.unquote()完成了这项任务。 (我tested it against your example on codepad。)

答案 2 :(得分:1)

在Python 3中,这些函数是urllib.parse.unquoteurllib.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)

URL encoding the space character: + or %20提供了有关是否使用unquoteunquote_plus的更多信息。