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