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


当前回答

当你只想让你的字符串是XML和HTML安全的时候,你应该使用htmlspecialchars($strText, ENT_QUOTES):

例如,encode

& to & “To”; < to &lt; >到&gt; '到&#039;

但是,如果文本中还有Unicode或不常见符号的额外字符,则应该使用htmlentities()来确保它们在HTML页面中正确显示。

注:

'只会被htmlspecialchars()编码到&#039;如果传入ENT_QUOTES选项。& # 039;是更安全的使用然后&apos;由于旧版本的Internet Explorer不支持&apos;实体。 从技术上讲,>不需要按照XML规范进行编码,但是为了与<被编码的要求保持一致,通常也会对它进行编码。

其他回答

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

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

翻译执行以下翻译字符:

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

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

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

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 &lt; b &gt;. 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 &lt; br &gt;
echo htmlspecialchars('µ †');             // This will print -  µ †

htmlentities

Htmlentities (string $string)非常类似于htmlspecialchars,需要多个参数,其中第一个参数是字符串,所有其他参数都是可选的(某些标志,某些编码等)。与htmlspecialchars不同,htmlentities不仅将字符串中的特殊字符转换为HTML实体,还将所有适用的字符转换为HTML实体。

echo htmlentities('An example <br>'); // This will print - An example &lt; br &gt;
echo htmlentities('µ †');             // This will print -  &micro; &dagger; 

因为:

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

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

我刚刚发现了get_html_translation_table函数。你传递给它HTML_ENTITIES或者HTML_SPECIALCHARS,它会返回一个数组,里面是要被编码的字符以及它们的编码方式。

当你只想让你的字符串是XML和HTML安全的时候,你应该使用htmlspecialchars($strText, ENT_QUOTES):

例如,encode

& to & “To”; < to &lt; >到&gt; '到&#039;

但是,如果文本中还有Unicode或不常见符号的额外字符,则应该使用htmlentities()来确保它们在HTML页面中正确显示。

注:

'只会被htmlspecialchars()编码到&#039;如果传入ENT_QUOTES选项。& # 039;是更安全的使用然后&apos;由于旧版本的Internet Explorer不支持&apos;实体。 从技术上讲,>不需要按照XML规范进行编码,但是为了与<被编码的要求保持一致,通常也会对它进行编码。