PHP函数strip_tags的一个bug浅析

yipeiwu_com7年前PHP代码库

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

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

比如下述代码:

复制代码 代码如下:

<div>string</div>string<string<b>hello</b><div>string</div>

通过 strip_tags($str, ‘<div>') 过滤,我们可能期望得到如下结果:

复制代码 代码如下:

<div>string</div>string<stringhello<div>string</div>

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

复制代码 代码如下:

<div>string</div>string

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

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

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

相关文章

PHP 使用openssl 扩展实现公钥加密的方法

如下所示: // 生成私钥 # openssl genrsa -out rsa_private_key.pem 1024 // 生成公钥 # openssl rsa -in rsa_...

完美解决PHP中文乱码

一.首先是PHP网页的编码 1. php文件本身的编码与网页的编码应匹配 a. 如果欲使用gb2312编码,那么php要输出头:header(“Content-Type: text/ht...

PHP语言中global和$GLOBALS[]的分析 之二

还是借用上一篇的例子: PHP代码 复制代码 代码如下: <?php // 例子1 function test_global() { global $var1, $var2; $v...

PHP执行linux系统命令的常用函数使用说明

system函数 说明:执行外部程序并显示输出资料。 语法:string system(string command, int [return_var]); 返回值: 字符串 详细介绍:...

php 文件状态缓存带来的问题

stat(),lstat(),file_exists(),is_writable(),is_readable(),is_executable(),is_file(),is_dir(),i...