[英]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.