如何在 PHP 中获取 DOMElement 的内部文本?

问题描述 投票:0回答:2

我们在我们的网站上使用 CMS。许多用户将 HTML 内容添加到数据库中,但格式很奇怪。例如,将所有 HTML 放在一行中:

<h1>This is my title</h1><p>First paragraph</p><p>Second paragraph</p>

当然,这会在浏览器中正确呈现。但是,我正在用 PHP 编写一个脚本,将该数据加载到 DOMDocument 中,如下所示:

$doc = new DOMDocument();
$doc->loadHTML($row['body_html']);
var_dump($doc->documentElement->textContent);

这显示为:

This is my titleFirst paragraphSecond paragraph

如何让

documentElement
返回
innerText
,而不是
textContent
?我相信
innerText
将返回一个带有换行符的字符串。

php html dom
2个回答
1
投票

正如cb0所说:

您应该迭代 DomDocument 中的所有元素并获取 逐项文本并手动插入空格。看一看 例如这里。 DomDocument 本身不知道它应该在哪里,但是 空格。

我编写了以下函数来递归遍历 DOMDocument 对象:

function get_text_from_dom($node, $text) {
  if (!is_null($node->childNodes)) {
    foreach ($node->childNodes as $node) {
      $text = get_text_from_dom($node, $text);
    }
  }
  else {
    return $text . $node->textContent . ' ';
  }
  return $text;
}

并将问题中的代码替换为以下内容:

$doc = new DOMDocument();
$doc->loadHTML($row['body_html']);
var_dump(get_text_from_dom($doc->documentElement));

这是荣耀的。


0
投票

答案就是节点值

 $arrDivs = $dom->getElementsByTagName('div'); 

 foreach($arrDivs as $div){
     $text = $div->nodeValue;
     echo $text . PHP_EOL . PHP_EOL;
 }
© www.soinside.com 2019 - 2024. All rights reserved.