您的位置:

PHP strip_tags函数介绍

当我们从一个页面上抓取/读取数据时,经常会出现不需要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 = '
    

这是一个有些HTML标记的文字。

'; echo '
' . stripTagsContent($str, '

') . '
';

可以看到,此时例子中的第二个参数为可以保留的HTML标签,第三个参数invert为false,表示移除除保留标签之外的其他元素。

五、总结:

使用PHP中的strip_tags函数可以非常轻松地移除HTML标记,提高数据输入和输出的安全性和准确性。并且在指定保留或移除标签时,也可以通过函数参数轻松实现标签筛选。