如何在PHP中获取DOMElement的innerText?

时间:2017-03-02 20:49:40

标签: php html dom

我们在网站上使用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会返回一个包含换行符的字符串。

1 个答案:

答案 0 :(得分:1)

正如cb0所说:

  

你应该遍历DomDocument中的所有元素并获取   逐项文本并手动插入空格。看一看   例如here。 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));

光荣。