【问题标题】:How can I get a DOMElement's innerText in PHP?如何在 PHP 中获取 DOMElement 的 innerText?
【发布时间】:2017-03-04 03:57:23
【问题描述】:

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

【问题讨论】:

  • 您应该遍历 DomDocument 中的所有元素并逐项获取文本并手动插入空格。例如,看看here。 DomDocument 本身不知道它应该在哪里,除了空格。

标签: php html dom


【解决方案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));

太棒了。

【讨论】:

    猜你喜欢
    • 2011-11-01
    • 2016-03-21
    • 2016-09-30
    • 2023-01-21
    • 2011-04-18
    • 2017-09-16
    • 2012-01-31
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多