htmlentities和htmlspecialchars的区别
htmlentities
说明
转换所有具有html实体的字符。函数各方面都和htmlspecialchars()一样, 除了htmlentities()会转换所有具有 HTML 实体的字符。
htmlentities(string$string
,int$flags
= ENT_COMPAT | ENT_HTML401,string$encoding
= ini_get("default_charset"),bool$double_encode
=true
) :string
如果要解码(反向操作),可以使用html_entity_decode()。
有效参数
ENT_COMPAT | 会转换双引号,不转换单引号。 |
ENT_QUOTES | 既转换双引号也转换单引号。 |
ENT_NOQUOTES | 单/双引号都不转换 |
ENT_IGNORE | 静默丢弃无效的代码单元序列,而不是返回空字符串。 不建议使用此标记, 因为它» 可能有安全影响。 |
ENT_SUBSTITUTE | 替换无效的代码单元序列为 Unicode 代替符(Replacement Character), U+FFFD (UTF-8) 或者 � (其他),而不是返回空字符串。 |
ENT_DISALLOWED | 为文档的无效代码点替换为 Unicode 代替符(Replacement Character): U+FFFD (UTF-8),或 �(其他),而不是把它们留在原处。 比如以下情况下就很有用:要保证 XML 文档嵌入额外内容时格式合法。 |
使用例
$str="<script>alert('中文需要设置第三个参数')</script>";
// 单引号双引号都转换
echo htmlentities($str, ENT_QUOTES, 'utf-8');
// 结果
<script>alert('中文需要设置第三个参数')</script>gt;
$str='<script>alert("中文需要设置第三个参数"")</script>';
// 不编码任何引号
echo htmlentities($str, ENT_NOQUOTES, 'gb312');
// 结果
<script>alert("中文需要设置第三个参数"")</script>gt;
htmlspecialchars
说明
只转换固定几个特殊的字符。如下:
字符 | 替换后 |
---|---|
&符号 | & |
" 双引号 | " ,除非设置了ENT_NOQUOTES |
' 单引号 | 设置了ENT_QUOTES 后,单双引号都会被转换 |
< 小于 | < |
> 大于 | > |
解码:htmlspecialchars_decode
htmlspecialchars(string$string
,int$flags
= ENT_COMPAT | ENT_HTML401,string$encoding
= ini_get("default_charset"),bool$double_encode
=true
) :string
flags参数与htmlentities相同。
区别
htmlentities 和 htmlspecialchars 的区别在于 htmlentities 会转化所有的可以被转化为HTML实体的字符串,而htmlspecialchars 只会转化手册上列出的几个 也就是会影响 html 解析的那几个基本字符)。一般来说,使用 htmlspecialchars 转化掉基本字符就已经足够了,没有必要使用 htmlentities。实在要使用 htmlentities 时,要注意为第三个参数传递正确的编码。