如何在 Python 3.1中取消转义字符串中的 HTML 实体?

我找遍了所有地方,只找到了 python 2.6及更早版本的解决方案,没有关于如何在 python 3.X 中实现这一点的内容。(我只能访问 Win7机顶盒。)

我必须能够在3.1中做到这一点,而且最好不要使用外部库。目前,我已经安装了 httplib2并访问了命令提示 curl (这就是我获得页面源代码的方法)。不幸的是,curl 不解码 html 实体,据我所知,我在文档中找不到对其进行解码的命令。

是的,我试过让美丽的汤工作,很多次没有成功的3.X。如果您能提供 EXPLICIT 说明,说明如何让它在微软视窗环境下的 python3工作,我将非常感激。

所以,为了清楚起见,我需要把像这样的字符串: Suzy & John转换成像这样的字符串: “ Suzy & John”。

99855 次浏览

你可以使用函数 无法逃脱:

Python 3.4 + (感谢 J.F. 塞巴斯蒂安的更新) :

import html
html.unescape('Suzy & John')
# 'Suzy & John'


html.unescape('"')
# '"'

Python 3.3或以上:

import html.parser
html.parser.HTMLParser().unescape('Suzy & John')

蟒蛇2:

import HTMLParser
HTMLParser.HTMLParser().unescape('Suzy & John')

Python 3. x 也有 Html 实体

我不确定这是不是一个内置的库,但它看起来像你需要和支持3.1。

发信人: http://docs.python.org/3.1/library/xml.sax.utils.html?highlight=html%20unescape

Unescape (数据,实体 = {}) 在数据字符串中取消转义’&’、’<’和’>’。

您可以为此目的使用 xml.sax.saxutils.unescape。该模块包含在 Python 标准库中,可在 Python 2.x 和 Python 3.x 之间移植。

>>> import xml.sax.saxutils as saxutils
>>> saxutils.unescape("Suzy &amp; John")
'Suzy & John'

显然我的名声不够好除了发布这个,什么都做不了。Unutbu 的回答并非无可避免。我发现唯一起作用的是这个函数:

import re
from htmlentitydefs import name2codepoint as n2cp


def decodeHtmlentities(string):
def substitute_entity(match):
ent = match.group(2)
if match.group(1) == "#":
return unichr(int(ent))
else:
cp = n2cp.get(ent)
if cp:
return unichr(cp)
else:
return match.group()
entity_re = re.compile("&(#?)(\d{1,5}|\w{1,8});")
return entity_re.subn(substitute_entity, string)[0]

我从这个 呼叫上得到的。

在我的例子中,我有一个在 as3转义函数中转义的 html 字符串。经过一个小时的谷歌没有发现任何有用的东西,所以我写了这个递归函数来满足我的需要。就是这个,

def unescape(string):
index = string.find("%")
if index == -1:
return string
else:
#if it is escaped unicode character do different decoding
if string[index+1:index+2] == 'u':
replace_with = ("\\"+string[index+1:index+6]).decode('unicode_escape')
string = string.replace(string[index:index+6],replace_with)
else:
replace_with = string[index+1:index+3].decode('hex')
string = string.replace(string[index:index+3],replace_with)
return unescape(string)

增加了处理 Unicode 字符的功能。