17

我正在解析 html 文档并将其提取到 DOMDocument。这些文档是将显示在另一个页面内的子表单。在保存解析后的 DOMDocuments 时,它会自动添加 doctype、html、head 和 body 标签。因为我正在处理子表单,所以我想删除所有这些并只保存表单的子标签。

如何在保存 domdocument 时跳过自动生成 html、head、body 和其他标签?

4

3 回答 3

28

与@KoolKabin 答案相同,但要短一些:

return preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $dom->saveHTML());
于 2012-04-05T05:27:51.623 回答
18

从 PHP 5.4 和 Libxml 2.6 开始,目前有更简单的方法:当您加载 html 时

$html->loadHTML($content, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD); 

在输出中,不会有 doctype、html 或 body 标签。资源

于 2017-12-14T08:58:13.297 回答
16

在阅读了数百个链接后自己得到了它。希望它也能帮助其他人......

return preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $objDOM->saveHTML()));

详细信息:http ://www.php.net/manual/en/domdocument.savehtml.php

于 2012-04-04T18:14:09.607 回答