htmlspecialchars()和htmlentities()之间有什么区别。什么时候应该使用其中一个?
可以使用
htmlspecialchars:
当不需要对所有具有等效HTML字符的字符进行编码时。
如果您知道页面编码与文本特殊符号匹配,为什么要使用htmlentities? htmlspecialchars非常简单,并且产生更少的代码发送给客户端。
例如:
1 2 3 4 5 6 7
| echo htmlentities('<Il était une fois un être>.');
// Output: <Il était une fois un ê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 était une fois un ê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_ENTITIES或HTML_SPECIALCHARS,它将返回一个数组,其中包含将要编码的字符及其编码方式。
htmlspecialchars ()进行最少的编码,以确保您的字符串不会被解析为HTML。与使用htmlentities ()绝对对所有具有编码的内容进行编码相比,这将使您的字符串更易于阅读。
n
您可能要使用一些Unicode字符编码,例如UTF-8和htmlspecialchars。因为不需要在"字符集"中为"所有[适用]字符"生成" HTML实体"(即htmlentities根据文档进行的操作)。
n
n
n