【发布时间】:2011-06-29 08:14:38
【问题描述】:
如<section>。对此我有什么办法吗?
【问题讨论】:
标签: php dom html domdocument
如<section>。对此我有什么办法吗?
【问题讨论】:
标签: php dom html domdocument
我在 PHP 的 DOMDoc 和 XSL 函数中遇到了这个问题。您基本上必须将文档加载为 XML。这是我让<video> 标签工作的唯一方法。
更新:
您也可以尝试将元素和实体添加到<!DOCTYPE html5 >,只要$doc->resolveExternals = true。
【讨论】:
/> 的自闭合标签,例如<img src="foo.jpg">
/> 自闭合。在 HTML5 中,没有这样的规则。空标签可以以任一格式表示,例如<img> 和<img />。如果所有空标签都表示为自闭合,则 HTML5 文档只能被解析为 XML(仅通过语法兼容性)。由于任何一个都是有效的,你不应该依赖它。
我不知道你是否尝试过这个答案中最终指向的库:
DOM parser that allows HTML5-style </ in <script> tag
Html5lib 为我解决了您遇到的相同问题(是 <aside> 和 <nav> 标签触发了我的问题)
我用它来解析 html 片段,优点是它是 DOMDocument 的替代品,因为目前它使用 DOMDocument 作为输出对象,所以在我的实现中没有其他功能被破坏。
文档中有一条说明,他们希望在未来远离 DOMDocument。
用于 PHP 的 html5lib 可以在这里找到: http://code.google.com/p/html5lib/downloads/detail?name=html5lib-php-0.1.tar.gz&can=2&q=
在answer linked to above 中有更多关于使用的细节。
【讨论】:
尝试忽略错误:
在我的例子中,我在几个文件中有几个“小部件”,它们充当模板。例如: template_header.html 模板页脚.html
<?php
//Load header
$dom = new DOMDocument();
@$dom->loadHTMLFile('template_header.html');
$xpath = new DOMXpath($dom);
$nodelist = $xpath->query('div[class="template-widget"]');
foreach($nodelist as $node){
echo $dom->saveHTML($node);
}
?>
注意 $dom->loadhtmlfile 有和 '@' 来忽略错误。
【讨论】: