nos*_*klo 175
cgi.escape
很好.它逃脱了:
<
至 <
>
至 >
&
至 &
这对所有HTML都足够了.
编辑:如果您有非ascii字符,您也想要转义,包含在另一个使用不同编码的编码文档中,如Craig说,只需使用:
data.encode('ascii', 'xmlcharrefreplace')
Run Code Online (Sandbox Code Playgroud)
不要忘了解码data
到unicode
第一,使用任何编码它编码的.
但是根据我的经验,如果你unicode
从一开始就一直工作,那种编码就没用了.只需在文档头中指定的编码结束时进行编码(utf-8
以获得最大的兼容性).
例:
>>> cgi.escape(u'<a>bá</a>').encode('ascii', 'xmlcharrefreplace')
'<a>bá</a>
Run Code Online (Sandbox Code Playgroud)
另外值得注意的是(感谢Greg)是额外的quote
参数cgi.escape
需要.设置为True
,cgi.escape
也会转义双引号字符("
),以便您可以在XML/HTML属性中使用结果值.
编辑:请注意,cgi.escape在Python 3.2中已被弃用,html.escape
除了quote
默认为True 之外,它的作用相同.
Mac*_*rko 95
在Python 3.2 html
中引入了一个新模块,用于从HTML标记中转义保留字符.
它有一个功能escape()
:
>>> import html
>>> html.escape('x > 2 && x < 7')
'x > 2 && x < 7'
Run Code Online (Sandbox Code Playgroud)
Sup*_*Guy 10
如果您希望在URL中转义HTML:
这可能不是OP想要的(问题没有清楚地表明在哪个上下文中意图使用转义),但Python的本机库urllib有一个方法来转义需要安全地包含在URL中的HTML实体.
以下是一个例子:
#!/usr/bin/python
from urllib import quote
x = '+<>^&'
print quote(x) # prints '%2B%3C%3E%5E%26'
Run Code Online (Sandbox Code Playgroud)
cgi.escape
在转义HTML标记和字符实体的有限意义上,应该很好地逃避HTML.
但是您可能还必须考虑编码问题:如果您要引用的HTML在特定编码中具有非ASCII字符,那么您还必须注意在引用时明智地表示这些字符.也许您可以将它们转换为实体.否则,您应确保在"源"HTML与其嵌入的页面之间进行正确的编码转换,以避免破坏非ASCII字符.
还有优秀的markupsafe包.
>>> from markupsafe import Markup, escape
>>> escape("<script>alert(document.cookie);</script>")
Markup(u'<script>alert(document.cookie);</script>')
Run Code Online (Sandbox Code Playgroud)
该markupsafe
软件包设计精良,可能是最通用和Pythonic的方式逃避,恕我直言,因为:
Markup
)是一个派生自unicode的类(即isinstance(escape('str'), unicode) == True
__html__
属性的对象)和模板重载(__html_format__
).没有库,纯 python,可以安全地将文本转义为 html 文本:
text.replace('&', '&').replace('>', '>').replace('<', '<'
).replace('\'',''').replace('"','"').encode('ascii', 'xmlcharrefreplace')
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
108151 次 |
最近记录: |