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

PHP5.4およびLibxml2.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 に答える