PHP nodevalue剥离html标签

Posted

技术标签:

【中文标题】PHP nodevalue剥离html标签【英文标题】:PHP nodevalue stripping html tags 【发布时间】:2013-07-11 03:59:12 【问题描述】:

我在其他地方似乎也有类似的解决方案,但我无法转换为使用我自己的代码。

我有一个函数可以在段落标签之间拆分一个 html 字符串并返回一个数组。代码如下...

$dom = new DOMDocument();
$dom->loadHTML($string);
$domx = new DOMXPath($dom);
$entries = $domx->evaluate("//p");
$result = array();
foreach ($entries as $entry) 
    $result[] = '<' . $entry->tagName . '>' . $entry->nodeValue .  '</' . $entry->tagName . '>';


return $result;

有人可以帮我从中删除 nodeValue 元素,以便它返回带有完整 html 标签的段落内容吗?

我正在测试的 html 是这样的:http://adam-makes-websites.com/tests/htmltest/test.html

我对代码所做的事情的完整测试(因为它与使用 ownerDocument->saveHTML 的建议一致)在这里:http://adam-makes-websites.com/tests/htmltest/runtest.txt

测试的输出可以在这里看到:http://adam-makes-websites.com/tests/htmltest/runtest.php

【问题讨论】:

PHP + DOMDocument: outerHTML for element?的可能重复 【参考方案1】:

您需要在ownerDocument 属性上调用saveHTML

$result[] = $entry->ownerDocument->saveHTML($entry);

【讨论】:

@AdamJones - 我运行了 Orangepill 的代码,它在 saveXML 上运行良好。 @PédeLeão 我在想,如果内容格式不正确,它可能会在 saveXML 上出现问题。我知道有效的 HTML != 有效的 XML 保存 html 恐怕也不会改善它。我现在已将 html 添加到问题中... 将您的 xpath 查询更改为 "//p|//ul" 以在结果中包含 ul 我似乎还有一个小问题。它与编码有关。页面中的某些字符显示为 â 而不是 ” 某些地方的空格也显示为 Â。有什么想法吗?【参考方案2】:
$dom = new DOMDocument();
$dom->loadHTML($string);
$entries = $dom->getElementsByTagName('p');
$new_dom = new DOMDocument();
foreach ($entries as $entry) 
    $new_dom->appendChild($new_dom->importNode($entry, TRUE));

$result = $new_dom->saveHTML()

【讨论】:

恐怕这不会返回任何内容 @AdamJones - 我再次运行它没有问题。 我刚刚添加了一个指向我正在使用的 html 的链接(在一个字符串变量中),如果这有帮助,可以在上面运行代码? ul/li 不在 p 标签中...这就是结果中缺少它们的原因。 @AdamJones - 我刚刚使用您提供的 HTML 运行它。它工作正常。

以上是关于PHP nodevalue剥离html标签的主要内容,如果未能解决你的问题,请参考以下文章

PHP DOM获取nodevalue html? (不剥离标签)

PHP DOM:设置 nodeValue 时,代码未格式化,而是显示文字 HTML 标签

PHP 剥离PHP的HTML标签功能

PHP 剥离html并修改标签和空格

在Java中剥离HTML标签[重复]

如何使用 PHP Dom 提取 innerHTML [重复]