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

标签 php web-scraping strip-tags

我使用 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 和需要删除的标签始终不同。

我搜索了几个小时来寻找适合我需要的功能,但找不到任何有用的东西。

有什么想法吗?

最佳答案

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

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

demo显示它用任何东西替换了所需的标签。

请注意,您可能需要对其进行更多调整,例如,补偿标签内的空白或您的示例未展示的其他未知数。

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

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

关于PHP:strip_tags - 只删除某些标签(及其内容)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11165895/

相关文章:

c# - 如何在网页上搜索一些文字?

c# - 如何从网站获取DOM数据

php - 在没有 HTML 标签的情况下显示我的内容

java - 如何在 Java 中从 HTTP POST 请求中检索 JSON?

python - 如何找到正确的 xpath 并循环遍历表?

php - 在整个文档中去除标签的快速方法

php - 如何将字符串数组转换为 PHP 中的关联数组?

javascript - 为 iFrame 加载 GIF

php - 访问 Symfony2 请求对象中的 POST 值