PHP新特性 第9.9章 字符串-htmlentities PHP新特性 第9.9章 字符串-htmlentities

2023-06-16

一、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 字符串,第二个参数表示要转义单引号,第三个参数表示输入字符串的字符集编码。

https://file.lulublog.cn/images/3/2023/06/Ckc8p4VccQQ99Pg04C7x9Z92cpPg1k.png

二、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 输入。

阅读 517