在任何 wbe 应用中展示用户输出时,首先对其进行“净化”去除任何潜在危险的 HTML 是非常必要的。
    一个恶意的用户可以制作某些 HTML,若被你的 web 应用直接输出,对查看它的人来说会很危险。

    虽然可以尝试使用正则表达式来净化 HTML,但不要这样做。HTML是一种复杂的语言,试图使用正则表达式来净化 HTML 几乎总是失败的。

    如果阅读了一节,
    你也许也会考虑使用 filter_var() 函数。
    然而 ,
    并且需要不直观的配置以接近 htmlentities() 函数的效果,
    因此也不是一个好的选择。

    对于简单需求的净化

    如果你的 web 应用仅需要完全地转义(因此可以无害地呈现,但不是完全去除) HTML,
    则使用 PHP 的内建 函数。
    这个函数要比 HTML Purifier 快得多,因此它不对 HTML 做任何验证—-仅转义所有东西。

    示例

    对于复杂需求的净化

    对于很多 web 应用来说,简单地转义 HTML 是不够的。
    你可能想完全去除任何HTML,或者允许一小部分子集的 HTML 存在。
    若是如此,则使用 HTML Purifier 库。

    HTML Purifier 是一个经过充分测试但效率比较低的库。
    这就是为什么如果你的需求并不复杂就应使用 ,
    因为它的效率要快得多。

    但其缺点就是相当的慢,它要求一些设置,在一个共享主机的环境里可能是不可行的。
    其文档通常也复杂而不易理解。
    以下示例是一个基本的使用配置。
    查看文档阅读 HTML Purifier 提供的更多更高级的特性。

    示例

    陷阱

    • 以错误的字符编码使用htmlentities()会造成意想不到的输出。
      在调用该函数时始终确认指定了一种字符编码,并且该编码与将被净化的字符串的编码相匹配。
      更多细节请查看。
    • 使用htmlentities()时,始终包含ENT_QUOTES和字符编码参数。
      默认情况下,htmlentities()不会对单引号编码。多愚蠢的默认做法!

    进一步阅读