【问题标题】:How to remove all tags including content in PHP apart from certain specified ones?除了某些指定的标签之外,如何删除所有标签,包括 PHP 中的内容?
【发布时间】:2018-02-04 16:05:44
【问题描述】:

我在 PHP 中有一个包含完整 HTML 文档的字符串(包括 <script><header><footer> 等标签)。

除了少数几个标签之外,我怎样才能删除所有这些标签及其内容?

我想保留<p><b><img><h2><em> 标签以及这些标签中的内容。其他所有内容都应删除。

我不太确定如何解决这个问题,并且在网上找不到任何与我相似的问题/解决方案。

<p>Hello <b>this</b></p> is an <span>example</span>

上面的例子应该变成:

<p>Hello <b>this</b></p>

代码应删除所有未包含在要保留的指定标签数组中的标签和内容。

【问题讨论】:

  • 也许strip_tags() 可以帮助你。
  • @Syscall 我已经调查过了,但这并没有删除标签之间的内容。

标签: php html regex tags


【解决方案1】:

这是一种农民的方式,但你可以preg_replace一次你想要的每个标签:

$text = "<header>This is header</header><body><p>This is paragraph</p></body>";
$text = preg_replace("/<header(.*)<\/header>/iUs", "", $text);

您可以使用preg_replace&lt;script&gt;&lt;footer&gt;

【讨论】:

    【解决方案2】:

    您想要的远比简单的 DoM 操作复杂得多。因为您需要删除指定标签的部分innerHtml。您可以做的是通过 tagName (getElementByTagName) 获取所有重要元素并查看 innerHtml。但是你对整个 HTML 有什么期望呢?

    这是一个示例代码,它为您要保留的指定标签连接 innerHtml。但是您首先需要使用 Id 或 Class 来识别您的 HTML div。完成后:

    var myHtml = document.getElementById('myHtml');
    
    var tagsToKeep = ["p", "h1"...];
    var newHtml = ""
    
    tagsToKeep.forEach((tag)=> var tagHtml = myHtml.getElementByTagName(tag);
    
    tagHtml.forEach((element) => { newHtml += element.innerHTML + "\n" });
    });
    

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 2011-06-20
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多