带有额外标签的 DOMDocument 保存 html
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 解析器 to avoid using regex's,因此必须在解析器的输出上使用它们似乎有点违反直觉。
PHPs DOMDocument 会在您加载 HTML 时修复文档。这意味着它添加了 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 <= 5.3
第一个最佳选择是更新 PHP。 PHP 5.3 不再维护。
第二个选项是使用 DOMDocument::saveXML($node, LIBXML_NOEMPTYTAG)。这将生成一个 XML (XHTML) 片段,但对于大多数情况应该足够了。
最后一个选项是使用字符串函数。
我正在使用 HTMLDom 来操作一个字符串,而不是一个完整的网页。当我使用 saveHTML()
时,它会自动抛出 doctype
和 html
标签。
$str = 'frament containing html';
$str = utf8_encode($str);
$doc->LoadHTML($str);
...do stuff...
$str = $doc->saveHTML();
在不自动包含额外标签的情况下保存 HTML 片段的正确方法是什么。做不到;删除这些额外标签的正确方法?
我使用了 html 解析器 to avoid using regex's,因此必须在解析器的输出上使用它们似乎有点违反直觉。
PHPs DOMDocument 会在您加载 HTML 时修复文档。这意味着它添加了 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 <= 5.3
第一个最佳选择是更新 PHP。 PHP 5.3 不再维护。
第二个选项是使用 DOMDocument::saveXML($node, LIBXML_NOEMPTYTAG)。这将生成一个 XML (XHTML) 片段,但对于大多数情况应该足够了。
最后一个选项是使用字符串函数。