Mic*_*dek 5 javascript python escaping urllib
通过阅读各种帖子,似乎JavaScript unescape()相当于Pythons urllib.unquote(),但是当我测试两者时,我会得到不同的结果:
unescape('%u003c%u0062%u0072%u003e');
Run Code Online (Sandbox Code Playgroud)
输出: <br>
import urllib
urllib.unquote('%u003c%u0062%u0072%u003e')
Run Code Online (Sandbox Code Playgroud)
输出: %u003c%u0062%u0072%u003e
我希望Python也能回归<br>.关于我在这里缺少什么的想法?
谢谢!
%uxxxx是(Py 3)/ (Py 2)不支持的非标准URL编码方案.urllib.parse.unquote()urllib.unquote()
它只是ECMAScript ECMA-262第3版的一部分; 格式被W3C拒绝,并且从未成为RFC的一部分.
您可以使用正则表达式来转换此类代码点:
try:
unichr # only in Python 2
except NameError:
unichr = chr # Python 3
re.sub(r'%u([a-fA-F0-9]{4}|[a-fA-F0-9]{2})', lambda m: unichr(int(m.group(1), 16)), quoted)
Run Code Online (Sandbox Code Playgroud)
这解码了ECMAScript 3rd ed可以解码%uxxxx的%uxx形式.
演示:
>>> import re
>>> quoted = '%u003c%u0062%u0072%u003e'
>>> re.sub(r'%u([a-fA-F0-9]{4}|[a-fA-F0-9]{2})', lambda m: chr(int(m.group(1), 16)), quoted)
'<br>'
>>> altquoted = '%u3c%u0062%u0072%u3e'
>>> re.sub(r'%u([a-fA-F0-9]{4}|[a-fA-F0-9]{2})', lambda m: chr(int(m.group(1), 16)), altquoted)
'<br>'
Run Code Online (Sandbox Code Playgroud)
但是如果可能的话,你应该完全避免使用编码.