【问题标题】:How can parse html code with tags in PHP? [duplicate]如何在 PHP 中解析带有标签的 html 代码? [复制]
【发布时间】:2020-11-02 10:48:16
【问题描述】:

我有一个带有代码的 html 页面:

<div id="content">
  <nav>some menu</nav>
  <article>
   <img src="photo.jpg" />
   <h1>Title</h1>
   <div class="articleContent">
      <p>text,text,text</p>
      <h4>sub title</h4>
      <p>text,text,text</p>
      <img src="">
      <p>text,text,text</p>
   </div>
  </article>
</div>

我想获得带有所有 html 标签的 div.articleContent:

<p>text,text,text</p>
<h4>sub title</h4>
<p>text,text,text</p>
<img src="photo.jpg">
<p>text,text,text</p>

我的代码:

$html = new DOMDocument;
$html = file_get_contents('url.html');
$dom = new DomDocument();

@ $dom->loadHTML($html);
$xpath = new DOMXpath($dom);
$content = $xpath->query("//div[@class='articleContent']");

但我只得到纯文本:

文字,文字,文字副标题文字,文字,文字文字,文字,文字

【问题讨论】:

  • 这可能就是你要找的东西:stackoverflow.com/a/6739848/10116997
  • 其他人可以帮助我吗?
  • 我提出了一个答案,希望对您有所帮助
  • 你试过$content-&gt;item(0)-&gt;c14n();吗?

标签: php html parsing


【解决方案1】:

对于您的情况,您可以尝试使用以下方法:

  1. 使用 saveHTML() 将加载的 HTML 文件放入字符串 ($string1)
  2. 使用 get_string_between 函数获取 [div class=articleContent] 和 [/div] 之间的字符串(我使用方括号,以便您可以在此处看到它们。)

下面的代码应该可以按预期工作:

<?php

function get_string_between($string, $start, $end){
    $string = ' ' . $string;
    $ini = strpos($string, $start);
    if ($ini == 0) return '';
    $ini += strlen($start);
    $len = strpos($string, $end, $ini) - $ini;
    return substr($string, $ini, $len);
}



$doc = new DOMDocument();
$html = file_get_contents('url.html');
$doc->loadHTML($html);
$string1= $doc->saveHTML();

echo get_string_between($string1, '<div class="articleContent">','</div>');


?>

下面是url.html文件(请放在php文件同目录下)

<div id="content">
  <nav>some menu</nav>
  <article>
   <img src="photo.jpg" />
   <h1>Title</h1>
   <div class="articleContent">
      <p>text,text,text</p>
      <h4>sub title</h4>
      <p>text,text,text</p>
      <img src="photo.jpg">
      <p>text,text,text</p>
   </div>
  </article>
</div>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-07
    • 2023-03-26
    • 1970-01-01
    • 2011-04-07
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多