htmlspecialchars()和htmlentities()之间的区别是什么?什么时候我应该用一种或另一种?
当前回答
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: <Il était une fois un être>. // ^^^^^^^^ ^^^^^^^ echo htmlspecialchars('<Il était une fois un être>.'); // Output: <Il était une fois un être>. // ^ ^ 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).
其他回答
因为:
有时在编写XML数据时,不能在XML文件中使用HTML实体。 因为htmlentities替换的字符比htmlspecialchars多。这是不必要的,这会降低PHP脚本的效率,从而降低HTML代码的可读性。
htmlentities只在页面使用ASCII或LATIN-1等编码而不是UTF-8,并且处理数据的编码与页面的编码不同时才有必要。
htmlspecialchars()进行最少的编码,以确保字符串不会被解析为HTML。这使得您的字符串比使用htmlentities()对所有具有编码的内容进行编码时更易于阅读。
htmlspecialchars()和htmlentities()之间的区别非常小。让我们来看一些例子:
htmlspecialchars
htmlspecialchars(string $string) takes multiple arguments where as the first argument is a string and all other arguments (certain flags, certain encodings etc. ) are optional. htmlspecialchars converts special characters in the string to HTML entities. For example if you have < br > in your string, htmlspecialchars will convert it into < b >. Whereas characters like µ † etc. have no special significance in HTML. So they will be not converted to HTML entities by htmlspecialchars function as shown in the below example.
echo htmlspecialchars('An example <br>'); // This will print - An example < br >
echo htmlspecialchars('µ †'); // This will print - µ †
htmlentities
Htmlentities (string $string)非常类似于htmlspecialchars,需要多个参数,其中第一个参数是字符串,所有其他参数都是可选的(某些标志,某些编码等)。与htmlspecialchars不同,htmlentities不仅将字符串中的特殊字符转换为HTML实体,还将所有适用的字符转换为HTML实体。
echo htmlentities('An example <br>'); // This will print - An example < br >
echo htmlentities('µ †'); // This will print - µ †
这是用htmlentities编码的。
implode("\t", array_values(get_html_translation_table(HTML_ENTITIES))):
" & < > ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ ÿ Œ œ Š š Ÿ ƒ ˆ ˜ Α Β Γ Δ Ε Ζ Η Θ Ι Κ Λ Μ Ν Ξ Ο Π Ρ Σ Τ Υ Φ Χ Ψ Ω α β γ δ ε ζ η θ ι κ λ μ ν ξ ο π ρ ς σ τ υ φ χ ψ ω ϑ ϒ ϖ – — ‘ ’ ‚ “ ” „ † ‡ • … ‰ ′ ″ ‹ › ‾ ⁄ € ℑ ℘ ℜ ™ ℵ ← ↑ → ↓ ↔ ↵ ⇐ ⇑ ⇒ ⇓ ⇔ ∀ ∂ ∃ ∅ ∇ ∈ ∉ ∋ ∏ ∑ − ∗ √ ∝ ∞ ∠ ∧ ∨ ∩ ∪ ∫ ∴ ∼ ≅ ≈ ≠ ≡ ≤ ≥ ⊂ ⊃ ⊄ ⊆ ⊇ ⊕ ⊗ ⊥ ⋅ ⌈ ⌉ ⌊ ⌋ ⟨ ⟩ ◊ ♠ ♣ ♥ ♦
这是用htmlspecialchars编码的。
implode("\t", array_values(get_html_translation_table(HTML_SPECIALCHARS))):
& < >
一个小例子,我需要在一个函数中索引2个客户端名称:
[1] => Altisoxxce Soluxxons S.à r.l.
[5] => Joxxson & Joxxson
我原来$term = get_term_by('name', htmlentities($name), '客户端');这导致术语名只包括&号数组项(&),而不包括重音项。但是当我将变量设置改为htmlspecialchars时,两者都能够通过函数运行。希望这能有所帮助!
推荐文章
- 在文本文件中创建或写入/追加
- 为什么PHP的json_encode函数转换UTF-8字符串为十六进制实体?
- 如何从一个查询插入多行使用雄辩/流利
- 在PHP单元测试执行期间,如何在CLI中输出?
- 在PHP中使用heredoc的优势是什么?
- PHP中的echo, print和print_r有什么区别?
- 如何将XML转换成PHP数组?
- 如何将对象转换为数组?
- 从IP地址获取位置
- 获取数组值的键名
- HTTPS和SSL3_GET_SERVER_CERTIFICATE:证书验证失败,CA is OK
- PHP -获取bool值,当为false时返回false
- 在foreach中通过引用传递
- 如何触发命令行PHP脚本的XDebug分析器?
- 如何找出如果你使用HTTPS没有$_SERVER['HTTPS']