Php 如何保存为HTML片段,而不是完整的DOM模型
问题是:我有一个将HTML片段保存到服务器端的网页。问题是,在PHP中,当我启动DOMDocument解析器,向给定元素添加自定义属性并将HTML保存为文件时,它会添加HTML、body、,以及其他不必要的元素,这些元素显然是无效的,因为该片段将作为HTML片段返回浏览器,插入DOM模型中,并且无效(不能嵌套HTML/BODY)。下面是我的代码的一个快速示例:Php 如何保存为HTML片段,而不是完整的DOM模型,php,html,regex,dom,Php,Html,Regex,Dom,问题是:我有一个将HTML片段保存到服务器端的网页。问题是,在PHP中,当我启动DOMDocument解析器,向给定元素添加自定义属性并将HTML保存为文件时,它会添加HTML、body、,以及其他不必要的元素,这些元素显然是无效的,因为该片段将作为HTML片段返回浏览器,插入DOM模型中,并且无效(不能嵌套HTML/BODY)。下面是我的代码的一个快速示例: $html="<div><magic></magic> <video controls>
$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=”
";
$dom=新的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标记。它还添加了
,但这没什么大不了的
在这一点上,我求助于preg_replace来删除html和body标记,但如果有办法将其保存为片段,那就太好了 您需要像这样初始化DOM结构:
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$html=$dom->saveHTML();
见:
LIBXML\u HTML\u未嵌入()
设置HTML\u PARSE\u NOIMPLIED
标志,该标志关闭隐含HTML/body的自动添加。。。元素
LIBXML\u HTML\u NODEFDTD
()
设置HTML\u PARSE\u NODEFDTD
标志,以防止在找不到默认doctype时添加默认doctype
您尝试过简单的save
方法吗?使用$dom->loadHTML($html,LIBXML\u html\u NOIMPLIED,LIBXML\u html\u NODEFDTD)
和$html=$dom->saveHTML()代码>@WiktorStribiżew解决了问题。请回答,这样我就可以接受它作为我问题的答案。谢谢。@netrox:我发布了一个答案。可能重复使用LIBXML\u HTML\u NOIMPLIED
选项会导致某些标记无法正确呈现,如果是这样,则需要解决方法。有关详细说明,请参阅。