当我们从一个页面上抓取/读取数据时,经常会出现不需要HTML标记的纯文本数据的需求。或者在自己的程序中需要过滤掉HTML标记以确保输出的安全性和数据的准确性。那么在这种情况下,我们就可以使用PHP的strip_tags函数,它可以移除字符串中全部或部分的HTML标签。
一、strip_tags函数的基本语法
mixed strip_tags ( string $string [, string $allowable_tags ] )
在上面的函数语法中:
- 第一个参数 string 是必需的,表示输入的字符串,该项不能省略。
- 第二个参数 allowable_tags 是可选的,它定义了允许出现的标签。如果别了这个参数,则该函数会移除所有的标签。
- 函数返回一个处理后的字符串,如果出错返回FALSE。
二、strip_tags函数的使用方法
strip_tags函数非常简单易用,下面是一个例子:
$str = "带 Html 标签的字符串"; $strtags = strip_tags($str); // 移除 $str 中的所有标记以下输出结果: echo $strtags;
输出结果是一个不带HTML标签的纯文本字符串。
三、移除指定的HTML标签
除了移除所有的HTML标记外,如果你希望只移除某些指定的HTML标签或属性,可以在函数的第二个可选参数中添加这些标签,例如:
$str = "这是一个有些HTML标记的文字。
"; $strtags = strip_tags($str, ''); echo $strtags;
这个例子中,\
和\ 标签被允许放行,而\ 被移除了。四、保留某些HTML标签和其中的内容
相比较之下,有时候我们是希望保留某些HTML标签和其中的内容,该怎么做呢?可以采用strip_tags函数的逆操作,把我们需要的标记或者内容替换成标记,具体实现如下:
function stripTagsContent($text, $tags = '', $invert = FALSE) { preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags); $tags = array_unique($tags[1]); if (is_array($tags) && count($tags) > 0) { if ($invert == FALSE) { $text = preg_replace('/<(' . implode('|', $tags) . ')(?:[\s]*[^>]*)?>/si', '', $text); }else { $text = preg_replace('/<(?!(?:' . implode('|', $tags) . ')(?:[\s]*[^>]*)?>)([\s\S]*?)>/si', '', $text); } } elseif ($invert == FALSE) { $text = preg_replace('/<(?!(?:br|p|img)(?:[\s]*[^>]*)?>)(.*?)>/si', '', $text); } return $text; } $str = ''; echo '这是一个有些HTML标记的文字。
' . stripTagsContent($str, '') . '
';
可以看到,此时例子中的第二个参数为可以保留的HTML标签,第三个参数invert为false,表示移除除保留标签之外的其他元素。
五、总结:
使用PHP中的strip_tags函数可以非常轻松地移除HTML标记,提高数据输入和输出的安全性和准确性。并且在指定保留或移除标签时,也可以通过函数参数轻松实现标签筛选。