一、htmlentities
我们可以使用 PHP 提供的 htmlentities 函数过滤 HTML,该函数会将所有 HTML 标签字符(&、<、>等)转化为对应的 HTML 实体,以便在应用存储层取出后安全渲染。
htmlentities(string,flags,character-set,double_encode)
但是有时候我们是允许用户输入某些 HTML 元素的,尤其是输入富文本的时候,比如图片、链接这些,但是 htmlentities 不能验证 HTML,检测不出输入字符串的字符集,故而无法实现这样的功能。
$input = "";
echo htmlentities($input, ENT_QUOTES, 'UTF-8');
htmlentities 的第一个参数表示要处理的 HTML 字符串,第二个参数表示要转义单引号,第三个参数表示输入字符串的字符集编码。
二、html_entity_decode
与 htmlentities 相对的是 html_entity_decode 方法,该方法会将所有 HTML 实体转化为对应的 HTML 标签。
三、htmlspecialchars
此外,PHP 还提供了一个类似的内置函数 htmlspecialchars,该函数也是用于将 HTML 标签字符转化为 HTML 实体,只是能够转化的字符有限(参考官方文档:http://php.net/manual/zh/function.htmlspecialchars.php)。
htmlentities 转换所有的 html 标记
htmlspecialchars 只格式化& ' " < 和 > 这几个特殊符号
四、 htmlspecialchars_decode
htmlspecialchars 也有一个与之相对的方法 htmlspecialchars_decode
五、HTML Purifier
如果想要直接将输入字符串中的所有 HTML 标签去掉,可以使用 strip_tags 方法。
如果需要更加强大的过滤 HTML 功能,可以使用 HTML Purifier 库,这是一个很强健且安全的 PHP 库,专门用于使用指定规则过滤 HTML 输入。