簡體   English   中英

DOMDocument使用額外的標簽保存html

[英]DOMDocument saving html with extra tags

我正在使用HTMLDom操作字符串,而不是完整的網頁。 當我使用saveHTML()它會自動拋出doctypehtml標簽。

$str = 'frament containing html';
$str = utf8_encode($str);
$doc->LoadHTML($str);
...do stuff...
$str = $doc->saveHTML();

在不自動包含額外標簽的情況下,保存HTML片段的正確方法是什么。 失敗了; 刪除這些多余標簽的正確方法?

我使用html解析器來避免使用regex ,因此不得不在解析器的輸出上使用它們似乎有點違反直覺。

如果加載HTML,PHPs DOMDocument會修復文檔。 這意味着它將添加htmlbody元素。

因此,您需要獲取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_NOIMPLIEDLIBXML_HTML_NODEFDTD選項。

$dom->loadHtml($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);

PHP <= 5.3

首先,最好的選擇是更新PHP。 不再維護PHP 5.3。

第二個選項是使用DOMDocument :: saveXML($ node,LIBXML_NOEMPTYTAG)。 這將生成一個XML(XHTML)片段,但對於大多數情況來說應該足夠了。

最后一個選擇是使用字符串函數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM