htmlentities()与htmlspecialchars()
htmlspecialchars()
和htmlentities()
之间有什么区别。 我应该什么时候使用其中一种?
来自htmlentities的PHP文档:
这个函数与htmlspecialchars()
在所有方面都是相同的,除了htmlentities()
,所有具有HTML字符实体等价物的字符都被转换为这些实体。
从htmlspecialchars的PHP文档:
某些字符在HTML中有特殊意义,如果要保留它们的含义,应该用HTML实体表示。 该函数返回一个字符串,其中包含一些转换; 翻译是对日常网络编程最有用的。 如果您需要翻译所有HTML字符实体,请改用htmlentities()
。
不同的是编码。 选择是一切(实体)或一切减去“特殊”字符,如&符号,双引号和单引号,小于和大于(特殊字符)。
我更喜欢尽可能使用htmlspecialchars
。
可以使用htmlspecialchars
:
当不需要编码所有具有与HTML等效的字符时。
如果您知道页面编码与文本特殊符号匹配,您为什么要使用htmlentities
? htmlspecialchars
非常简单,并且生成的代码少,可以发送给客户端。
例如:
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
比htmlspecialchars
更多的字符。 这是不必要的,使得PHP脚本的效率降低,并导致HTML代码的可读性降低。 只有当你的页面使用ASCII或LATIN-1等编码而不是UTF-8时,才需要使用htmlentities
而你使用与页面不同的编码处理数据。