如何使用PHP从html删除标签?

时间:2019-07-20 05:50:24

标签: php html explode

如何从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 <div class="page">,但是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获得标签之前和之后的标签?

2 个答案:

答案 0 :(得分:2)

使用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]);

这里的//div[@class='page']的XPath表达式可分解为具有<div>属性(用class表示)的@标签的任何page标签

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

这将输出...

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

您可以根据需要使用它。

答案 1 :(得分:0)

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

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

<?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/

希望这对您有帮助!