2012-03-29 29 views
11

Tôi đang phân tích cú pháp và tìm nạp tài liệu html vào DOMDocument. Các tài liệu đó là các biểu mẫu con sẽ được hiển thị bên trong một trang khác. Trong khi lưu DOMDocuments được phân tích cú pháp, nó sẽ tự động thêm các thẻ doctype, html, head và body. kể từ khi tôi đang làm việc trên các hình thức con tôi muốn loại bỏ tất cả những người và chỉ lưu các thẻ con của hình thức.xóa loại tài liệu trong khi lưu domdocument

Làm cách nào tôi có thể bỏ qua tự động tạo các thẻ html, head, body và các thẻ khác trong khi lưu domdocument?

Trả lời

15

Tự khắc phục sau khi đọc qua hàng trăm liên kết. hy vọng nó sẽ giúp kẻ khác quá ...

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

chi tiết về: http://www.php.net/manual/en/domdocument.savehtml.php

20

Tương tự như @KoolKabin câu trả lời, nhưng ngắn hơn một chút:

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

Tính đến PHP 5.4 và libxml 2.6, hiện tại có cách tiếp cận đơn giản hơn: khi bạn tải html như thế này

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

ở đầu ra, sẽ có không có thẻ doctype, html hoặc body. source

Các vấn đề liên quan