Code前端首页关于Code前端联系我们

使用strip_tags删除HTML标签的PHP函数

terry 2年前 (2023-09-29) 阅读数 52 #PHP
文章标签 PHP

在Web开发中我们经常会遇到需要删除HTML标签的情况。例如,当您发布文章时,需要将用户编写的富文本中的HTML标签去掉,只显示纯文本内容。对于这种情况,PHP提供了一个非常方便的函数——strip_tags(),它可以从字符串中剥离HTML标签。

1。 strip_tags()函数的基本用法

strip_tags()函数的基本用法非常简单。它只接受一个参数 - 要处理的字符串,并返回一个删除了 HTML 标签的字符串。

<?php
$str = '<p>这是一段<b>加粗</b><a href="http://www.baidu.com">链接</a>的<br>HTML</p>';
echo strip_tags($str);
?>

输出结果:

这是一段加粗链接的HTML

如您所见,本示例中的 HTML 输入字符串包含


标签,但这些标签在输出结果中被剥离。

2。指定允许的标签

strip_tags()函数默认会去除所有HTML标签,但有时我们需要保留某些标签,例如图像或链接标签。 strip_tags()函数提供了一个可选参数,可用于指定允许保留的标签。

<?php
$str = '<p>这是一段<b>加粗</b><a href="http://www.baidu.com">链接</a>和<img src="img.jpg">图片</p>';
$allow_tags = '<b><a>';
echo strip_tags($str, $allow_tags);
?>

输出结果:

这是一段<b>加粗</b><a href="http://www.baidu.com">链接</a>和图片

在这个例子中,我们指定允许保留的代码是,结果中的其他代码被删除。

3。指定允许的标签和属性

除了指定允许保留的标签之外,strip_tags()函数还可以指定允许保留的标签中的特定属性。比如img标签中我们只需要保留src属性,其他属性可以删除。

<?php
$str = '<p>这是一段<b>加粗</b><a href="http://www.baidu.com">链接</a>和<img src="img.jpg" alt="一张图片">图片</p>';
$allow_tags = '<b><a><img>';
$allow_attrs = array('src');
echo strip_tags($str, $allow_tags . $allow_attrs);
?>

输出结果:

这是一段<b>加粗</b><a href="http://www.baidu.com">链接</a>和<img src="img.jpg">图片

在本例中,除了指定允许保留的标签为之外,我们还指定了标签允许保留的属性为src等属性被删除。 。

4。考虑安全问题

虽然 strip_tags() 函数非常方便,但要注意它可能导致的安全问题。由于strip_tags()函数只能删除标签而无法验证标签的合法性,因此恶意脚本可以被保留并在浏览器中运行。为了避免这种情况,我们应该采取其他措施,例如过滤用户输入或使用专业的安全库。

5。广泛的应用示例

下面是strip_tags()函数的广泛使用的例子,它可以剥离用户指定的HTML标签,并指定允许保留的标签和属性。

<?php
function filter_html($str, $allow_tags = '', $allow_attrs = array()) {
    // 去除HTML标记
    $str = strip_tags($str, $allow_tags);
    
    // 去除HTML属性
    if (!empty($allow_attrs)) {
        $dom = new DOMDocument();
        @$dom->loadHTML('' . $str);
        $tags = $dom->getElementsByTagName('*');
        foreach ($tags as $tag) {
            $attrs = $tag->attributes;
            if (!is_null($attrs)) {
                for ($i = 0; $i length; $i++) {
                    $attr = $attrs->item($i);
                    $name = $attr->nodeName;
                    if (!in_array($name, $allow_attrs)) {
                        $tag->removeAttributeNode($attr);
                    }
                }
            }
        }
        $str = $dom->saveXML($dom->documentElement);
    }
    
    return $str;
}

$str = '<p>这是一段<b>加粗</b><a href="http://www.baidu.com">链接</a>和<img src="img.jpg" alt="一张图片">图片</p>';
$allow_tags = '<b><a><img>';
$allow_attrs = array('src');
echo filter_html($str, $allow_tags, $allow_attrs);
?>

输出结果:

这是一段<b>加粗</b><a href="http://www.baidu.com">链接</a>和<img src="img.jpg">图片

在这个例子中,我们定义了一个filter_html()函数,它可以删除HTML标签和属性,其中$allow_tags和$allow_attrs分别是允许保留的标签和属性的数组。该功能可以用在需要保证网站安全的场合,比如用户评论或者消息功能。

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门