在Python中最简单的HTML转义方法是什么?
cgi.escape 看起来是一个可行的选择。它好用吗?有没有什么更好的方法?
9 个回答
176
在Python 3.2版本中,新增了一个叫做 html
的模块,这个模块主要用来处理HTML中的一些特殊字符。
这个模块里有一个函数叫做 escape()
:
>>> import html
>>> html.escape('x > 2 && x < 7 single quote: \' double quote: "')
'x > 2 && x < 7 single quote: ' double quote: "'
204
html.escape
现在是正确的选择,以前在 Python 3.2 之前用的是 cgi.escape
。这个方法可以处理以下内容:
<
会变成<
>
会变成>
&
会变成&
这些处理对于所有 HTML 来说已经足够了。
补充说明:如果你还有一些非 ASCII 字符需要处理,比如在另一个使用不同编码的文档中使用,像 Craig 所说的,可以直接使用:
data.encode('ascii', 'xmlcharrefreplace')
记得先把 data
解码成 unicode
,用你原本编码时用的编码方式。
不过根据我的经验,如果你从一开始就一直使用 unicode
,那么这种编码方式其实没什么用。最后只需要按照文档头部指定的编码(比如 utf-8
,这样兼容性最好)进行编码就可以了。
举个例子:
>>> cgi.escape(u'<a>bá</a>').encode('ascii', 'xmlcharrefreplace')
'<a>bá</a>
还有一点值得注意(感谢 Greg),就是 cgi.escape
还有一个额外的 quote
参数。如果把它设置为 True
,那么 cgi.escape
还会处理双引号字符("
),这样你就可以把结果用在 XML/HTML 的属性中。
补充说明:注意在 Python 3.2 中,cgi.escape
已经被弃用了,取而代之的是 html.escape
,它的功能是一样的,只不过 quote
的默认值是 True。