繁体   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