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? (不剥离标签)