保存domdocument时删除doctype

时间:2012-03-29 11:16:56

标签: php domdocument skip

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

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

3 个答案:

答案 0 :(得分:21)

与@KoolKabin一样回答,但更短一些:

return preg_replace('~<(?:!DOCTYPE|/?(?:html|body))[^>]*>\s*~i', '', $dom->saveHTML());

答案 1 :(得分:16)

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

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

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

答案 2 :(得分:9)

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

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

在输出中,将没有doctype,html或body标签。 source