htmlspecialchars()和htmlentities()之间的区别是什么?什么时候我应该用一种或另一种?


当前回答

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

其他回答

因为:

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

htmlentities只在页面使用ASCII或LATIN-1等编码而不是UTF-8,并且处理数据的编码与页面的编码不同时才有必要。

htmlentities -将所有适用的字符转换为HTML实体。

htmlspecialchars -将特殊字符转换为HTML实体。

翻译执行以下翻译字符:

'&'(&)变成'&' “”(双引号)在没有设置ENT_NOQUOTES时变为“"”。 只有当设置了ENT_QUOTES时,"'"(单引号)才变为'&#039;'(或')。 <(小于)变成了&lt; '>'(大于)变成'&gt;'

你可以检查下面的代码,以了解什么是htmlentities和htmlspecialchars:

https://gist.github.com/joko-wandiro/f5c935708d9c37d8940b

您可能希望使用一些Unicode字符编码,例如UTF-8和htmlspecialchars。因为不需要为“所有适用的字符”(这是htmlentities根据文档所做的)生成“HTML实体”,如果它已经在您的字符集中。

Htmlspecialchars可以被使用:

When there is no need to encode all characters which have their HTML equivalents. If you know that the page encoding match the text special symbols, why would you use htmlentities? htmlspecialchars is much straightforward, and produce less code to send to the client. For example: 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;. // ^ ^ The second one is shorter, and does not cause any problems if ISO-8859-1 charset is set. When the data will be processed not only through a browser (to avoid decoding HTML entities), If the output is XML (see the answer by Artefacto).

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