htmlentities() vs. htmlspecialchars()

php
2022-08-30 05:49:42

和 之间有什么区别。我什么时候应该使用其中一个?htmlspecialchars()htmlentities()


答案 1

htmlspecialchars可用于:

  1. 当不需要对所有具有HTML等效项的字符进行编码时。

    如果知道页面编码与文本特殊符号匹配,为什么要使用? 非常简单,并且生成更少的代码以发送到客户端。htmlentitieshtmlspecialchars

    例如:

    echo htmlentities('<Il était une fois un être>.');
    // Output: &lt;Il &eacute;tait une fois un &ecirc;tre&gt;.
    //                ^^^^^^^^                 ^^^^^^^
    
    echo htmlspecialchars('<Il était une fois un être>.');
    // Output: &lt;Il était une fois un être&gt;.
    //                ^                 ^
    

    第二个更短,如果设置了ISO-8859-1字符集,则不会引起任何问题。

  2. 当数据将不仅通过浏览器处理时(以避免解码HTML实体),

  3. 如果输出是 XML(请参阅 Artefacto 的答案)。


答案 2

HTMLENT 的 PHP 文档中:

此函数在所有方面都相同,但 与 不同,所有具有 HTML 字符实体等效项的字符都转换为这些实体。htmlspecialchars()htmlentities()

htmlspecialchars 的 PHP 文档中:

某些字符在 HTML 中具有特殊意义,如果要保留其含义,则应由 HTML 实体表示。此函数返回一个字符串,其中包含其中一些转换;所做的翻译是那些对日常Web编程最有用的翻译。如果需要翻译所有 HTML 字符实体,请改用。htmlentities()

不同之处在于编码的内容。选项包括所有内容(实体)或“特殊”字符,如 & 符号、双引号和单引号、小于和大于(特殊字符)。

我更喜欢尽可能使用。htmlspecialchars

例如:

    echo htmlentities('<Il était une fois un être>.');
    // Output: &lt;Il &eacute;tait une fois un &ecirc;tre&gt;.
    //                ^^^^^^^^                 ^^^^^^^

    echo htmlspecialchars('<Il était une fois un être>.');
    // Output: &lt;Il était une fois un être&gt;.
    //                ^                 ^

推荐