【问题标题】:Is there a Python equivalent to the PHP function htmlspecialchars()?是否有与 PHP 函数 htmlspecialchars() 等效的 Python?
【发布时间】:2010-10-30 04:57:45
【问题描述】:

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

【问题讨论】:

  • 似乎有不止一种明显的方法可以做到这一点!哦不!

标签: php python html-entities htmlspecialchars


【解决方案1】:

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

def htmlspecialchars(content):
    return content.replace("&", "&amp;").replace('"', "&quot;").replace("'", "&#039;").replace("<", "&lt;").replace(">", "&gt;")

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我认为 python 有一个花哨的函数,名为“translate”,您可以使用它来缩短它
    • 有用的答案,但是您以错误的顺序将参数传递给 replace()。应该是:replace("要查找的字符串", "要替换的字符串")
    • @Ben 不,该函数按预期工作(它转义了“html 特殊字符”)。它寻找要转义的字符,并将其替换为该字符的 html 转义序列。也许您想取消转义?
    • 我的错! @AlejandroVD 你在现场。
    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:
      from django.utils.html import escape
      print escape('<div class="q">Q & A</div>')
      

      【讨论】:

      • 我对此投了赞成票,因为我不想像其他一些答案那样解析任何内容,甚至不想进行搜索和替换,我想要一个可以为我完成所有工作的函数。
      【解决方案5】:

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

      >>> import html.entities
      >>> html.entities.codepoint2name[ord("&")]
      'amp'
      >>> html.entities.codepoint2name[ord('"')]
      'quot'
      

      【讨论】:

        【解决方案6】:

        你可能想要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,它可能对你更有用

        【讨论】:

          【解决方案7】:

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

          【讨论】:

          • 自 3.3 起已弃用
          【解决方案8】:

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

          【讨论】:

            猜你喜欢
            • 2011-02-09
            • 1970-01-01
            • 2018-10-14
            • 2017-02-14
            • 2015-05-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多