PHP DOMDocument中获取BODY的html源码?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (108)

我使用PHP的DOMDocument解析和规范用户提交的HTML,使用该loadHTML方法解析内容,然后通过以下方式获得格式良好的结果saveHTML

$dom= new DOMDocument();
$dom->loadHTML('<div><p>Hello World');
$well_formed= $dom->saveHTML(); 
echo($well_formed);

这在解析片段和添加适当的结束标签方面做得很好。问题是我也越来越一堆标签,我不想如<!DOCTYPE><html><head><body>。我明白,每个格式正确的HTML文档都需要这些标签,但我正在规范化的HTML片段将被插入到现有的有效文档中。

提问于
用户回答回答于

你不想使用HTML文档,而是使用HTML片段 - HTML代码的一部分;; 这意味着DOMDocument不是所需要的。

HTML Purifier是用PHP编写的符合标准的HTML过滤器库。HTML Purifier不仅会删除所有恶意代码(更好的称为XSS),而且还会 确保您的文档符合标准,只有通过全面的W3C规范知识才能实现。

而且,如果你尝试你的部分代码:

<div><p>Hello World

使用HTMLPurifier的演示页面,可以将这个干净的HTML作为输出:

<div><p>Hello World</p></div>

(请注意,HTMLPurfier提供了广泛的选项,并且查看它的文档可能不会受到影响)

用户回答回答于

快速解决问题是使用xPath表达式来获取正文。

$dom= new DOMDocument();
$dom->loadHTML('<div><p>Hello World');      
$xpath = new DOMXPath($dom);
$body = $xpath->query('/html/body');
echo($dom->saveXml($body->item(0)));

这里有一个警告词。有时,loadHTML在遇到肯定格式不正确的HTML文档时会发出警告。如果你正在解析这些HTML文档,你需要找到一个更好的html解析器 [self link warning]。

扫码关注云+社区

领取腾讯云代金券