htmlspecialchars()
和之间有什么区别htmlentities()
?我什么时候应该使用其中一种?
htmlspecialchars
可能用过了:
当不需要编码具有HTML等价物的所有字符时.
如果您知道页面编码与文本特殊符号匹配,为什么要使用htmlentities
?htmlspecialchars
非常简单,产生的代码更少,可以发送给客户端.
例如:
echo htmlentities('.');
// Output: <Il était une fois un être>.
// ^^^^^^^^ ^^^^^^^
echo htmlspecialchars('.');
// Output: <Il était une fois un être>.
// ^ ^
第二个更短,如果设置了ISO-8859-1字符集,则不会引起任何问题.
当不仅通过浏览器处理数据时(为了避免解码HTML实体),
如果输出是XML(参见Artefacto的答案).
从htmlentities的PHP文档:
此函数
htmlspecialchars()
在所有方面都是相同的,除了htmlentities()
具有HTML字符实体等价物的所有字符都被转换为这些实体.
从htmlspecialchars的PHP文档:
某些字符在HTML中具有特殊意义,如果要保留其含义,则应由HTML实体表示.此函数返回一个字符串,其中包含一些转换; 所做的翻译是对日常网络编程最有用的翻译.如果需要翻译所有HTML字符实体,请
htmlentities()
改用.
不同之处在于编码.选择是所有(实体)或"特殊"字符,如&符号,双引号和单引号,小于和大于(specialchars).
我希望尽可能使用htmlspecialchars
.
因为:
有时您正在编写XML数据,并且您无法在XML文件中使用HTML实体.
因为htmlentities
替换的字符多于htmlspecialchars
.这是不必要的,使PHP脚本效率降低,并且生成的HTML代码可读性降低.
htmlentities
仅当您的页面使用ASCII或LATIN-1等编码而不是UTF-8并且您使用与页面不同的编码处理数据时才需要.
这是编码的htmlentities
.
implode( "\t", array_values( get_html_translation_table( HTML_ENTITIES ) ) )
:
"&<>
¡¢£¤¥|§¨©ª«¬®¯°±²³'μ·¸¹º»¼½¾¿A A A A A AÆÇE E E E I I I I dñ○○○○○×○U U U U第yßA A A A A AæçE E E E I I I I dñ○○○○ö÷øU U U Uýþÿœœ ššŸƒ〜αβγδεζηθ ΙκλμνξΟπρστΥΦΧΨΩαβγδεζηθικλμνξοπρςστ υφχψωθΥπ - - '',"""†‡•...‰'"<>〜/€ℑℜ™ℵ←↑→↓↔↵⇐⇒⇒∀∀∂ ∃∅∇∈∉∋ΠΣ -*√α∞∠∧∨∩∪ ∫∴ 〜≅≈≠≡≤≥⊂⊃ ⊄⊆⊇⊕⊗⊥⋅⌈⌉⌊⌋⟨⟩◊♠♣♥♦
这是编码的htmlspecialchars
.
implode( "\t", array_values( get_html_translation_table( HTML_SPECIALCHARS ) ) )
:
"&<>
htmlspecialchars($strText, ENT_QUOTES)
当您只希望字符串是XML和HTML安全时,您应该使用:
例如,编码
&to&
"到"
>到> '到'
但是,如果您的文本中还有其他字符是Unicode或不常见的符号,那么您应该使用htmlentities()来确保它们在HTML页面中正确显示. 笔记:
'只会被htmlspecialchars()编码为' 如果传入ENT_QUOTES选项.' 然后使用更安全 因为旧版本的Internet Explorer不支持' 实体. 从技术上讲,>不需要按照XML规范进行编码,但通常编码也是为了与<编码的要求保持一致. 我刚刚发现了这个
问题是:因为我的文本是由用户提供的,我不知道我是否有unicode或不常见的符号.为什么我应该在这种情况下使用htmlspecialchars?
6> Eric Hogue..:get_html_translation_table
功能.你传递它HTML_ENTITIES
或HTML_SPECIALCHARS
它返回一个数组,其中包含将被编码的字符以及它们将如何编码.
htmlspecialchars ()
进行最小量的编码以确保您的字符串不会被解析为HTML.这使得您的字符串比以前用于htmlentities ()
编码具有编码的所有内容时更加人性化.
htmlentities - 将所有适用的字符转换为HTML实体.
htmlspecialchars - 将特殊字符转换为HTML实体.
翻译在下面执行翻译字符:
'&'(&符号)变为'&'
'''(双引号)变为''''' 当没有设置ENT_NOQUOTES时.
"'"(单引号)成为''' (或')仅在设置了ENT_QUOTES时.
'<'(小于)成为'<'
'>'(大于)变为'>'
您可以查看以下代码,了解有关什么是htmlentities和htmlspecialchars的更多信息:
https://gist.github.com/joko-wandiro/f5c935708d9c37d8940b
您可能希望使用某些Unicode字符编码,例如UTF-8和htmlspecialchars.因为没有任何需要为"所有[适用的字符"生成"HTML实体"(根据文档,这就是htmlentities所做的),如果它已经在你的字符集中.