PHP 函数 strip_tags 处理字符串缺陷 Bug

PHP 函数strip_tags()是一个常用函数,该函数可以剥去字符串中的 HTML、XML 以及 PHP 的标签。极大方便了对字符串的操作,但是strip_tags()函数存在缺陷 Bug,原因是strip_tags()无法验证 HTML 不完整或者破损标签将导致更多的数据被删除。

例子:

  1. $str = '<div>string</div>string<string<b>hello</b><div>string</div>';
  2. echo strip_tags($str, '<div>');

输出:

  1. <div>string</div>string

通过strip_tags()函数过滤<b>标签,其实我希望得到下面这个结果:

  1. <div>string</div>string<stringhello<div>string</div>

导致未能得到期望结果的原因,是因为字符串中第三个<string左边那个尖括号,strip_tags()函数误删除了其他字符。

经过查找 PHP 相关文档发现strip_tags()函数,有一个警告,警告内容是,由于strip_tags()无法实际验证 HTML,不完整或者破损标签将导致更多的数据被删除。

既然不能验证 HTML 标签完整性,所以遇到字符串中包含“<”或“>”导致误删字符串中其它字符。使用strip_tags()函数需要慎重考虑。另外一个思路就是,用正则表达式过滤标签。

参考文献

PHP 文档:PHP: strip_tags - Manual

(完)