如何将特殊字符转换为HTML实体?

5
我希望能够在Python中转换特殊字符,例如"%$!&@á é ©"而不仅限于'<&">',这是目前所有我找到的文档和参考资料都显示的。cgi.escape不解决问题。
例如,字符串"á ê ĩ &"应该被转换为"&aacute; &ecirc; &itilde; &amp;"
请问是否有人知道如何解决这个问题? 我正在使用Python 2.6。

2
请注意两件事:(1)名称实体可能会引起问题,您应该使用数字实体代替。 (2)为什么要使用实体?在大多数情况下,更好的解决方案是对文档进行UTF-8编码,以便它可以包含字母,而不是使用实体。 - Konrad Rudolph
1
http://wiki.python.org/moin/EscapingHtml - Quentin
我同意你的看法,@KonradRudolph。我不喜欢使用实体,但是我所在的系统需要使用,所以我别无选择。=/ - Jayme Tosi Neto
1
@Jayme 没问题,有时候你别无选择。只是想确保你知道这一点。 - Konrad Rudolph
2个回答

7

链接已不再有效。在 Python 2 中请使用 HTMLParser,而在 Python 3 中请使用等价的 html.parser。 - oxidworks

5
我找到了一种内置解决方案,可以通过搜索htmlentitydefs.codepoint2name(@Ruben Vermeersch在他的答案中提到过)。这个解决方案可以在这里找到:http://bytes.com/topic/python/answers/594350-convert-unicode-chars-html-entities 以下是该函数:
def htmlescape(text):
    text = (text).decode('utf-8')

    from htmlentitydefs import codepoint2name
    d = dict((unichr(code), u'&%s;' % name) for code,name in codepoint2name.iteritems() if code!=38) # exclude "&"    
    if u"&" in text:
        text = text.replace(u"&", u"&amp;")
    for key, value in d.iteritems():
        if key in text:
            text = text.replace(key, value)
    return text

谢谢大家的帮助! ;)

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