gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 00:59:16 26 4
gpt4 key购买 nike

问题是:我有一个将 HTML 片段保存到服务器端的网页。问题是,在 PHP 中,当我启动 DOMDocument 解析器、向给定元素添加自定义属性并将 HTML 另存为文件时,它会逐字添加 html、body 和其他显然无效的不必要元素因为该片段将作为要插入到 DOM 模型中的 HTML 片段返回到浏览器,并且它将无效(您不能嵌套 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 和 body 标签,但如果有一种方法可以将其保存为片段,那就太好了。

最佳答案

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

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

参见 PHP documentation :

LIBXML_HTML_NOIMPLIED (integer)
Sets HTML_PARSE_NOIMPLIED flag, which turns off the automatic adding of implied html/body... elements.

LIBXML_HTML_NODEFDTD (integer)
Sets HTML_PARSE_NODEFDTD flag, which prevents a default doctype being added when one is not found.

关于php - 如何保存为 HTML 片段,而不是完整的 DOM 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42883922/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com