使用strip_tags删除HTML标签的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前端网发表,如需转载,请注明页面地址。
code前端网