【问题标题】:PHP nodevalue stripping html tagsPHP nodevalue剥离html标签
【发布时间】: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 标签的段落内容吗?

【问题讨论】:

标签: php domdocument nodevalue


【解决方案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 运行它。它工作正常。