如何另存为 HTML 片段,而不是完整的 DOM 模型



这是问题:我有一个将HTML片段保存到服务器端的网页。问题是,在 PHP 中,当我启动 DOMDocument 解析器时,将自定义属性添加到给定元素并将 HTML 另存为文件,它实际上添加了 html、body 和其他不必要的元素,这些元素显然是无效的,因为该片段将作为 HTML 片段返回到浏览器以插入 DOM 模型中,并且它是无效的(你不能嵌套HTML/BODY(。下面是我的代码的快速示例:

$html="<div><magic></magic>
 <video controls></video>
    <a href='http://example.com'>Example</a><br>
    <a href='http://google.com'>Google</a><br></div>
 ";
$dom = new DOMDocument();
$dom->loadHTML($html); 
$html=$dom->C14N();
echo $html;

但它表明:

<html>
<body>
<div>
<magic></magic>
<video controls=""></video>
<a href="http://example.com">Example</a>
<br></br>
<a href="http://google.com">Google</a>
<br></br>
</div>
</body>
</html>

如何仅保存碎片化的 HTML?我想出了$dom->C14N((,但它仍然添加了html和body标签。它还增加了</br>但这没什么大不了的。

在这一点上,我正在诉诸preg_replace来删除 html 和正文标签,但如果有一种方法可以将其保存为片段,那就太好了。

你需要像这样初始化 DOM 结构:

$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$html=$dom->saveHTML();

请参阅 PHP 文档:

LIBXML_HTML_NOIMPLIED(整数(
设置HTML_PARSE_NOIMPLIED标志,关闭自动添加隐含的 html/正文...元素。

LIBXML_HTML_NODEFDTD(整数(
设置HTML_PARSE_NODEFDTD标志,以防止在找不到默认文档类型时添加默认文档类型。

最新更新