PHP:用strip_tags - 只删除某些标记(和它们的内容)?(PHP: strip_tag

2019-06-25 17:23发布

我用的是strip_tags()函数,但我需要删除一些标签(及其所有内容)。

例如 :

<div>
  <p class="test">
    Test A
  </p>
  <span>
    Test B
  </span>
  <div>
    Test C
  </div>
</div>

比方说,我需要摆脱P和SPAN标记的,只有不停:

<div>
  <div>
    Test C
  </div>
</div>

strip_tags预计作为第二个参数要保持标签。

在该特定示例我可以使用striptags($html, "<div>"); 但我刮HTML和需要删除的标签是不同所有的时间。

我搜索了一个适合我的需要的功能小时,也没有找到什么有用的东西。

有任何想法吗?

Answer 1:

使用正则表达式。 像这样的东西应该工作:

$tags = array( 'p', 'span');
$text = preg_replace( '#<(' . implode( '|', $tags) . ')>.*?<\/$1>#s', '', $text);

该演示展示它什么也没有更换所需的标签。

请注意,您可能需要更多的调整,比方说,给标签,或者你的例子并不能说明其他未知之内弥补空白。

这里是用来捕获标签带或不带属性的正则表达式:

'#<(' . implode( '|', $tags) . ')(?:[^>]+)?>.*?<\/$1>#s'


Answer 2:

你说你正在使用简单的HTML DOM(好!这是解析HTML正确的方式)。 当我需要删除标记及其内容,我做的:

$rows = $html->find("span");

foreach ($rows as $row)
{
  $row->outertext = "";
}

$html->load($html->save());

是必需的最后一行,因为DOM被后修饰,所以整个DOM已被折叠,然后再分析,这样的变化将成为永久性的困惑(IMO,在简单的HTML DOM中的错误)。

简单HTML DOM方法比正则表达式更安全,更稳定。



文章来源: PHP: strip_tags - remove only certain tags (and their contents)?