Home > Backend Development > PHP Tutorial > A serious bug in the PHP function strip_tags_PHP Tutorial

A serious bug in the PHP function strip_tags_PHP Tutorial

WBOY
Release: 2016-07-21 14:58:48
Original
940 people have browsed it

PHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。

由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数据被删除。

比如下述代码:

<div>string</div>string<strong><span style="COLOR: #ff0000"><</span></strong>string<b>hello</b><div>string</div>
</span></strong>
Copy after login

通过 strip_tags($str, ‘

’) 过滤,我们可能期望得到如下结果:

<div>string</div>string<strong><span style="COLOR: #ff0000"><</span></strong>stringhello<div>string</div>
Copy after login

而实际操作结果是这样的:

<div>string</div>string
Copy after login

这一切都是因为加红的那个左尖括号,查了 PHP 的文档,有一个警告提示:

由于 strip_tags() 无法实际验证 HTML,不完整或者破损标签将导致更多的数据被删除。

既然在执行过滤前无法验证代码正确性,遇到和标签相关的字符 “<” 或 “>” 后面的代码就全挂了!

2013.01.11 更新:
以下方法可以解决该问题,但可能在 HTML 数据过大时,存在一定的效率问题,慎用!

function fixtags ($text) {
$text = htmlspecialchars($text);
$text = preg_replace("/&quot;/", "&quot;\"", $text);
$tags = "/&lt;(!|)(\/|)(\w*)(\ |)(\w*)([\\\=]*)(?|(\")\"&quot;\"|)(?|(.*)?&quot;(\")|)([\ ]?)(\/|)&gt;/i";
$replacement = "<$1$2$3$4$5$6$7$8$9$10$11>";
$text = preg_replace($tags, $replacement, $text);
$text = preg_replace("/=\"\"/", "=", $text);
$text = preg_replace("/&quot;\"/", "\"", $text);
return $text;
}
Copy after login

使用方法:

strip_tags(fixtags($string), '<div>');
Copy after login

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/363781.htmlTechArticlePHP 函数 strip_tags 提供了从字符串中去除 HTML 和 PHP 标记的功能,该函数尝试返回给定的字符串 str 去除空字符、HTML 和 PHP 标记后的结果。...
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template