如何在Python中转义HTML?
我有一个 <img src=__string__>
,但是字符串里面可能会包含双引号("),我该怎么处理才能让它正常工作呢?
举个例子:
__string__ = test".jpg
<img src="test".jpg">
这样是不行的。
5 个回答
4
import cgi
s = cgi.escape('test".jpg', True)
请注意,True
这个标志会让它转义双引号。如果你还需要转义单引号(如果你是那种少见的人,喜欢用单引号来包裹HTML属性),可以查看那个文档链接中关于xml.sax.saxutils.quoteattr()的说明。后者可以处理两种引号,不过速度大约慢三倍:
>>> timeit.Timer( "escape('asdf\"asef', True)", "from cgi import escape").timeit()
1.2772219181060791
>>> timeit.Timer( "quoteattr('asdf\"asef')", "from xml.sax.saxutils import quoteattr").timeit()
3.9785079956054688
15
在Python 3.2版本中,新增了一个叫做html
的模块,这个模块主要用来处理HTML标记中的一些特殊字符,让它们变得安全。
这个模块里有一个函数叫做html.escape(s, quote=True)
。如果你把可选的参数quote设置为真(True),那么字符(")
和(')
也会被转换成安全的形式。
用法示例:
>>> import html
>>> html.escape('x > 2 && x < 7')
'x > 2 && x < 7'
13
如果你要处理的值可能包含引号,最好的办法是使用 quoteattr
方法:http://docs.python.org/library/xml.sax.utils.html#module-xml.sax.saxutils
这个方法在关于 cgi.escape() 方法的文档下面有提到。