关于php:htmlentities()与htmlspecialchars()

关于php:htmlentities()与htmlspecialchars()

htmlentities() vs. htmlspecialchars()

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


可以使用

htmlspecialchars

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

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

    例如:

    1
    2
    3
    4
    5
    6
    7
    echo htmlentities('<Il était une fois un être>.');
    // Output: <Il &eacute;tait une fois un &ecirc;tre>.
    //                ^^^^^^^^                 ^^^^^^^

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

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

  • 不仅要通过浏览器处理数据(以避免解码HTML实体),

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


  • 来自htmlentities的PHP文档:

    This function is identical to htmlspecialchars() in all ways, except with htmlentities(), all characters which have HTML character entity equivalents are translated into these entities.

    来自PHP文档的htmlspecialchars:

    Certain characters have special significance in HTML, and should be represented by HTML entities if they are to preserve their meanings. This function returns a string with some of these conversions made; the translations made are those most useful for everyday web programming. If you require all HTML character entities to be translated, use htmlentities() instead.

    不同之处在于所编码的内容。选择是所有(实体)或"特殊"字符,例如"&"号,双引号和单引号,小于和大于(特殊字符)。

    我希望尽可能使用htmlspecialchars

    例如:

    1
    2
    3
    4
    5
    6
    7
        echo htmlentities('<Il était une fois un être>.');
        // Output: <Il &eacute;tait une fois un &ecirc;tre>.
        //                ^^^^^^^^                 ^^^^^^^

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

    n


    原因:

    • 有时您正在编写XML数据,而不能在XML文件中使用HTML实体。
    • 因为htmlentities代替htmlspecialchars替换了更多字符。这是不必要的,这会使PHP脚本的效率降低,并且所产生的HTML代码的可读性降低。

    htmlentities仅在您的页面使用诸如ASCII或LATIN-1之类的编码而不是UTF-8并且您正在使用与该页面不同的编码来处理数据时才是必需的。


    当您只希望字符串为XML和HTML安全时,应使用htmlspecialchars($strText, ENT_QUOTES)

    例如,对

    进行编码


    • 我刚刚发现关于get_html_translation_table函数的信息。将其传递给HTML_ENTITIESHTML_SPECIALCHARS,它将返回一个数组,其中包含将要编码的字符及其编码方式。


      htmlspecialchars ()进行最少的编码,以确保您的字符串不会被解析为HTML。与使用htmlentities ()绝对对所有具有编码的内容进行编码相比,这将使您的字符串更易于阅读。


      n


      您可能要使用一些Unicode字符编码,例如UTF-8和htmlspecialchars。因为不需要在"字符集"中为"所有[适用]字符"生成" HTML实体"(即htmlentities根据文档进行的操作)。


      n


      n


      n


    推荐阅读