【问题标题】:How to remove tag from html using PHP?如何使用 PHP 从 html 中删除标签?
【发布时间】:2019-11-29 00:30:34
【问题描述】:

如何从 HTML 中获取<div class="page">...</div>,然后回显出来?

<html>
  <body>
    <table class="a">...</table>
    <div class="wrap">
      <div class="page">...</div>
      <div class="footer">...</div>
    </div>
  </body>
</html>

我尝试explode &lt;div class="page"&gt;array[0] 的结果只显示该标记之前的代码:

<html>
  <body>
    <table class="a">...</table>
    <div class="wrap">
      <div class="page">...</div>
      <div class="footer">...</div>
    </div>
  </body>
</html>

我需要的是:

<html>
  <body>
    <div class="wrap">
      <div class="page">...</div>
    </div>
  </body>
</html>

或者更好:

<html>
  <body>
    <div class="page">...</div>
  </body>
</html>

到目前为止我尝试过的代码是

$url = file_get_content("sample.html"); 
$cont1 = explode('<div class="wrap">', con1);

是否可以使用explode获取标签前后的标签?

【问题讨论】:

  • 你的问题不是很清楚。您是在尝试解析现有的 HTML,还是生成新的 HTML?
  • 编辑现有的 html... php 是另一个用于将 html 操作为新 html 的脚本,其预期结果如图所示...
  • 好的,你能把上面例子的代码贴出来吗?
  • 你想要在渲染到浏览器之前还是之后。为什么你需要删除,而不是创建动态 html ?
  • $url = file_get_content("sample.html"); $cont1 = explode('
    ', con1);

标签: php html explode


【解决方案1】:

使用 DOMDocument 和 XPath 来操作 HTML(或 XML)会好得多,尽管可能很难进入 - 好处是巨大的。 DOMDocument 可以理解文档的结构和上下文,因此嵌套和属性成为您使用的核心部分。

以上可以解决

$html ='<html>
  <body>
    <table class="a">...</table>
    <div class="wrap">
      <div class="page">...</div>
      <div class="footer">...</div>
    </div>
  </body>
</html>';

$doc = new DOMDocument();
$doc->loadHTML($html);

$xp = new DOMXPath($doc);
$div = $xp->query("//div[@class='page']");

echo $doc->saveHTML($div[0]);

此处的 XPath 表达式 //div[@class='page'] 分解为任何 &lt;div&gt; 标记,该标记具有等于 pageclass 属性(使用 @ 表示)。

query()返回一个匹配节点的列表,所以在saveHTML()调用中,你需要使用[0]来选择第一个。

这输出...

<div class="page">...</div>

你可以随意使用。

【讨论】:

    【解决方案2】:

    您可以使用以下脚本删除某些带有内容的标签

    这是关于如何从带有标签内容的字符串中仅删除某些标签的代码示例

    <?php
        $string = "<p>Awesome</p><b> Website</b><i> by Narayan</i>. Thanks for visiting";
        $tags = array("p", "i");
    
        echo preg_replace('#<(' . implode( '|', $tags) . ')(?:[^>]+)?>.*?</\1>#s', '', $string);
    ?>
    

    另外,您可以参考以下链接(由 Narayan 提供), http://qnimate.com/remove-html-tags-from-string-using-php/

    希望对您有所帮助!

    【讨论】: