20

Python 中是否有与 PHP 函数 htmlspecialchars() 类似或等效的函数?到目前为止,我发现的最接近的是 htmlentitydefs.entitydefs()。

4

8 回答 8

12

我知道的最接近的事情是cgi.escape

于 2009-05-31T06:12:45.097 回答
7
from django.utils.html import escape
print escape('<div class="q">Q & A</div>')
于 2010-03-25T04:32:22.133 回答
4

在@garlon4 答案的基础上,您可以定义自己的htmlspecialchars(s)

def htmlspecialchars(text):
    return (
        text.replace("&", "&amp;").
        replace('"', "&quot;").
        replace("<", "&lt;").
        replace(">", "&gt;")
    )
于 2016-03-01T17:48:11.757 回答
3

我认为最简单的方法就是使用替换:

text.replace("&", "&amp;").replace('"', "&quot;").replace("<", "&lt;").replace(">", "&gt;")

PHP 只使用 htmlspecialchars 转义这四个实体。请注意,如果您在 PHP 中设置了 ENT_QUOTES,则需要将引号替换为 ' 而不是“。

于 2011-03-30T15:59:40.797 回答
3

您可能想要xml.sax.saxutils.escape

from xml.sax.saxutils import escape
escape(unsafe, {'"':'&quot;'}) # ENT_COMPAT
escape(unsafe, {'"':'&quot;', '\'':'&#039;'}) # ENT_QUOTES
escape(unsafe) # ENT_NOQUOTES

看看xml.sax.saxutils.quoteattr,它可能对你更有用

于 2009-05-31T06:31:53.530 回答
1

html.entities模块(htmlentitydefs适用于 python 2.x)包含一个字典codepoint2name,它应该可以满足您的需要。

>>> import html.entities
>>> html.entities.codepoint2name[ord("&")]
'amp'
>>> html.entities.codepoint2name[ord('"')]
'quot'
于 2009-05-31T08:27:17.790 回答
1

只需要对五个字符进行转义,因此可以使用一个简单的单行函数:

def htmlspecialchars(content):
    return content.replace("&", "&amp;").replace('"', "&quot;").replace("'", "&#039;").replace("<", "&lt;").replace(">", "&gt;")
于 2021-06-11T07:03:59.897 回答
-1

如果您使用的是 django 1.0,那么您的模板变量将已经被编码并准备好显示。如果您不希望全局打开它,也可以使用 safe运算符。{{ var|safe }}

于 2009-05-31T06:11:00.810 回答