当前位置:  开发笔记 > 编程语言 > 正文

htmlentities()与htmlspecialchars()

如何解决《htmlentities()与htmlspecialchars()》经验,为你挑选了9个好方法。

htmlspecialchars()和之间有什么区别htmlentities()?我什么时候应该使用其中一种?



1> Arseni Mourz..:

htmlspecialchars 可能用过了:

    当不需要编码具有HTML等价物的所有字符时.

    如果您知道页面编码与文本特殊符号匹配,为什么要使用htmlentitieshtmlspecialchars非常简单,产生的代码更少,可以发送给客户端.

    例如:

    echo htmlentities('.');
    // Output: <Il était une fois un être>.
    //                ^^^^^^^^                 ^^^^^^^
    
    echo htmlspecialchars('.');
    // Output: <Il était une fois un être>.
    //                ^                 ^
    

    第二个更短,如果设置了ISO-8859-1字符集,则不会引起任何问题.

    当不仅通过浏览器处理数据时(为了避免解码HTML实体),

    如果输出是XML(参见Artefacto的答案).


如果你使用早于5.4的PHP版本,htmlspecialchars($ str,ENT_QUOTES,"UTF-8")是最好的.ENT_QUOTES是编码单引号的必要条件.

2> Thomas Owens..:

从htmlentities的PHP文档:

此函数htmlspecialchars()在所有方面都是相同的,除了htmlentities()具有HTML字符实体等价物的所有字符都被转换为这些实体.

从htmlspecialchars的PHP文档:

某些字符在HTML中具有特殊意义,如果要保留其含义,则应由HTML实体表示.此函数返回一个字符串,其中包含一些转换; 所做的翻译是对日常网络编程最有用的翻译.如果需要翻译所有HTML字符实体,请htmlentities()改用.

不同之处在于编码.选择是所有(实体)或"特殊"字符,如&符号,双引号和单引号,小于和大于(specialchars).

我希望尽可能使用htmlspecialchars.


@Darius你所说的没有任何意义.只要为第三个参数指定"UTF-8",`htmlentities`和`htmlspecialchars`都可以处理UTF-8.
感谢您的回答,但是除了显而易见的差异之外,您是否愿意尽可能详细说明您喜欢什么`htmlspecialchars()`?什么情况下使用`htmlentities()`会导致问题,而`htmlspecialchars()`会不会?
因为使用htmlentities而不是htmlspecialchars而遇到了问题!如果你的网站是UTF8编码的,那么特殊的符号如"∞"会变成带有问号的黑色小钻石,因为htmlentities不知道如何处理它们,但htmlspecialchars确实如此.
从PHP 5.4开始,UTF-8是默认的编码选项(第三个参数).
@Darius:我们碰到了类似的东西.像我们一样,你可能使用的是早于5.4.0的PHP.因此,根据Jonathan的评论推断,我们需要明确指定UTF-8:htmlentities($ str,ENT_QUOTES,'UTF-8');
@YevgeniyAfanasyev我明白你的意思,在最后的文本中它看起来似乎已经倒退了.但文档中引用的黄色文字更好地解释了它.
最后一部分措辞倒退的@ADyson来自Jannie Theunissen的最后一次编辑.最初的答案措辞正确.我将再次编辑以纠正.

3> Artefacto..:

因为:

有时您正在编写XML数据,并且您无法在XML文件中使用HTML实体.

因为htmlentities替换的字符多于htmlspecialchars.这是不必要的,使PHP脚本效率降低,并且生成的HTML代码可读性降低.

htmlentities 仅当您的页面使用ASCII或LATIN-1等编码而不是UTF-8并且您使用与页面不同的编码处理数据时才需要.



4> 小智..:

这是编码的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 ) ) ):

"&<>


@Jonathan那些在列表中.如果您得到一个空结果,那么您可能错误地指定了编码.
谨防!乍一看,htmlentities看起来非常完整.但它缺少一堆真正基本和常见的角色(特别是如果你的客户喜欢MS).智能引号(例如,'或’),破折号(例如, - 或&mdash),商标符号(™或™)以及许多其他引号将使其返回null.
或者,您没有指定编码,而是依靠默认值,该默认值在PHP 5.4中进行了更改,然后(可能)在PHP 5.6中进行了更改,具体取决于您的配置。直到2012年,文档甚至都不建议您指定该参数。因此,如果您未指定* optional *第三个参数,并且未升级PHP,则htmlentities首先使用ISO-8859-1,然后使用UTF-8,然后使用php.ini中的所有内容,而不会在任何问题,但悄悄地什么也不返回。显然,这绝对不可能在某些时候导致数据丢失!

5> Kmeixner..:

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_ENTITIESHTML_SPECIALCHARS它返回一个数组,其中包含将被编码的字符以及它们将如何编码.


这对于您想要创建自己的功能很有用,例如替换一些额外的角色或做其他神奇的事情.

7> grossvogel..:

htmlspecialchars ()进行最小量的编码以确保您的字符串不会被解析为HTML.这使得您的字符串比以前用于htmlentities ()编码具有编码的所有内容时更加人性化.



8> Joko Wandiro..:

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

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

翻译在下面执行翻译字符:

'&'(&符号)变为'&'

'''(双引号)变为''''' 当没有设置ENT_NOQUOTES时.

"'"(单引号)成为''' (或')仅在设置了ENT_QUOTES时.

'<'(小于)成为'<'

'>'(大于)变为'>'

您可以查看以下代码,了解有关什么是htmlentities和htmlspecialchars的更多信息:

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



9> cic..:

您可能希望使用某些Unicode字符编码,例如UTF-8和htmlspecialchars.因为没有任何需要为"所有[适用的字符"生成"HTML实体"(根据文档,这就是htmlentities所做的),如果它已经在你的字符集中.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有