[英]DOMDocument saving html with extra tags
我正在使用HTMLDom操作字符串,而不是完整的網頁。 當我使用saveHTML()
它會自動拋出doctype
和html
標簽。
$str = 'frament containing html';
$str = utf8_encode($str);
$doc->LoadHTML($str);
...do stuff...
$str = $doc->saveHTML();
在不自動包含額外標簽的情況下,保存HTML片段的正確方法是什么。 失敗了; 刪除這些多余標簽的正確方法?
我使用html解析器來避免使用regex ,因此不得不在解析器的輸出上使用它們似乎有點違反直覺。
如果加載HTML,PHPs DOMDocument會修復文檔。 這意味着它將添加html
和body
元素。
因此,您需要獲取body
內的所有節點並將其另存為HTML。
$html = <<<'HTML'
<h1>Hello World</h1>
Text
<!-- comment -->
HTML;
$dom = new DOMDocument();
$dom->loadHtml($html);
$xpath = new DOMXPath($dom);
$result = '';
foreach ($xpath->evaluate('/html/body/node()') as $node) {
$result .= $dom->saveHtml($node);
}
echo $result;
這是另一種選擇,但並非在所有地方都可用。 PHP添加了LIBXML_HTML_NOIMPLIED
和LIBXML_HTML_NODEFDTD
選項。
$dom->loadHtml($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
首先,最好的選擇是更新PHP。 不再維護PHP 5.3。
第二個選項是使用DOMDocument :: saveXML($ node,LIBXML_NOEMPTYTAG)。 這將生成一個XML(XHTML)片段,但對於大多數情況來說應該足夠了。
最后一個選擇是使用字符串函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.