在Python中是否有与PHP函数htmlspecialchars()类似或等效的功能?到目前为止,我找到的最接近的是htmlentitydefs.entitydefs()。
在Python中是否有与PHP函数htmlspecialchars()类似或等效的功能?到目前为止,我找到的最接近的是htmlentitydefs.entitydefs()。
from django.utils.html import escape
print escape('<div class="q">Q & A</div>')
在 @garlon4 的回答基础上,你可以定义自己的 htmlspecialchars(s)
:
def htmlspecialchars(text):
return (
text.replace("&", "&").
replace('"', """).
replace("<", "<").
replace(">", ">")
)
我认为最简单的方法就是使用replace:
text.replace("&", "&").replace('"', """).replace("<", "<").replace(">", ">")
PHP只用htmlspecialchars来转义这四个实体。请注意,如果您在PHP中设置了ENT_QUOTES,则需要使用'而不是"来替换引号。
from xml.sax.saxutils import escape
escape(unsafe, {'"':'"'}) # ENT_COMPAT
escape(unsafe, {'"':'"', '\'':'''}) # ENT_QUOTES
escape(unsafe) # ENT_NOQUOTES
请看xml.sax.saxutils.quoteattr,它可能更适合您的需求。
只需要转义五个字符,因此您可以使用一个简单的一行函数:
def htmlspecialchars(content):
return content.replace("&", "&").replace('"', """).replace("'", "'").replace("<", "<").replace(">", ">")
html.entities
模块(对于 Python 2.x 是 htmlentitydefs
)包含一个名为 codepoint2name
的字典,它应该能满足您的需求。
>>> import html.entities
>>> html.entities.codepoint2name[ord("&")]
'amp'
>>> html.entities.codepoint2name[ord('"')]
'quot'
safe
运算符{{ var|safe }}
。