htmlspecialchars
这个函数的作用是把预定义的字符变成html实体,用W3C上面的例子来解释:
<?php
$str = "This is some <b>bold</b> text.";
echo htmlspecialchars($str);
?>
那么浏览器的展示结果就是这样的:
This is some <b>bold</b> text.
如果不使用htmlspecialchars
,那么浏览器的展示效果就是这样的:
This is some bold text.
也就是表示,字符串里面的<b></b>
标签被解析了。
上面提到了说htmlspecialchars
可以把特殊字符转换成html实体,那么
预定义的字符有:
&
(和号)成为&
"
(双引号)成为"
'
(单引号)成为'
<
(小于)成为<
>
(大于)成为>
那么这个htmlspecialchars
到底有什么用呢?——一般应用场景是在有输入框的时候,比如有个“反馈”的输入框,用户可以填写自己的意见。
有时候会在用户的“反馈意见”里面看见一些如<img src=xxx.com/xxx onerror=zyx123>
之类的东西。
这个输入框就有可能被黑客拿来进行XSS攻击。
虽说XSS攻击是能够绕过htmlspecialchars
的,但是你不进行htmlspecialchars
就是你没有安全意识了。╭(╯^╰)╮
关于XSS,会在以后的笔记中写到。
还有另外一个函数htmlentities
也可以把预定义的字符转换成HTML实体。
但是htmlentities
和htmlspecialchars
是有差别的,htmlspecialchars
至转换上面定义的那几个预定义字符,而htmlentities
会转换所有的html标记。
推荐使用htmlspecialchars
。
至于,当有中文时,htmlentities
会乱码的问题,有两种解决办法,一种是设置整个页面的header的Content-Type:text/html;charset=utf-8
,另一种办法是指定htmlentities
的编码,如htmlentities($str, ENT_QUOTES, "UTF-8");
在第三个参数里面设置了编码。
使用htmlspecialchars
作用在于,当由用户自定义的字符串要展示在浏览器里面的时候,把它当做字符串来看待,浏览器也就不会解析里面的标签。