PHP:strip_tags - 只删除某些标签(及其内容)?

Dyl*_*lan 9 php strip-tags web-scraping

我使用该strip_tags()功能,但我需要删除一些标签(及其所有内容).

例如 :

<div>
  <p class="test">
    Test A
  </p>
  <span>
    Test B
  </span>
  <div>
    Test C
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

让我们说,我需要摆脱P和SPAN标签,并且只保留:

<div>
  <div>
    Test C
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

strip_tags 期望作为第二个参数,你想要保持标签.

在这个特殊的例子中,我可以使用,striptags($html, "<div>"); 但我正在抓取的html和需要删除的标签一直不同.

我搜索了几个小时的功能,以满足我的需求,但找不到任何有用的功能.

有任何想法吗?

nic*_*ckb 11

使用正则表达式.这样的事情应该有效:

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

演示显示它无需替换所需的标签.

请注意,您可能需要对其进行更多调整,例如,以补偿​​标记中的空白或您的示例未演示的其他未知数.

以下是用于捕获带或不带属性的标记的正则表达式:

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

  • 谢谢,这对我的情况来说是完美的.我正在使用简单的html dom解析器来抓取HTML,只需要一些额外的剥离. (2认同)