【问题标题】:PHP: DOMDocument loadHTML returns an error when using HTML5 tagsPHP:DOMDocument loadHTML 在使用 HTML5 标签时返回错误
【发布时间】:2011-06-29 08:14:38
【问题描述】:

<section>。对此我有什么办法吗?

【问题讨论】:

标签: php dom html domdocument


【解决方案1】:

我在 PHP 的 DOMDoc 和 XSL 函数中遇到了这个问题。您基本上必须将文档加载为 XML。这是我让<video> 标签工作的唯一方法。

更新: 您也可以尝试将元素和实体添加到<!DOCTYPE html5 >,只要$doc->resolveExternals = true

【讨论】:

  • 但是我只能使用格式良好的 XML。 ://
  • Html5 应该格式正确 :P 你可以试试 $doc->resolveExternals = true;然后把你需要的html5标签放在] >中,DomDoc会服从doc-types
  • @James HTML5 不必是格式良好的 XML。您仍然可以使用没有/> 的自闭合标签,例如<img src="foo.jpg">
  • @James 澄清一下。 HTML5 不是 XML 也不是变体。像这样解析它几乎肯定会导致错误。在 XML 中,空标签 必须 使用 /> 自闭合。在 HTML5 中,没有这样的规则。空标签可以以任一格式表示,例如<img><img />。如果所有空标签都表示为自闭合,则 HTML5 文档只能被解析为 XML(仅通过语法兼容性)。由于任何一个都是有效的,你不应该依赖它。
  • @James 与其尝试将非 XML 文档解析为 XML,我认为更新 DOM 解析器以处理新的文档类型会更好。您对使用 externals 的建议是 IMO 的最佳临时解决方案
【解决方案2】:

我不知道你是否尝试过这个答案中最终指向的库:

DOM parser that allows HTML5-style </ in <script> tag

Html5lib 为我解决了您遇到的相同问题(是 &lt;aside&gt;&lt;nav&gt; 标签触发了我的问题)

我用它来解析 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 中有更多关于使用的细节。

【讨论】:

    【解决方案3】:

    尝试忽略错误:

    在我的例子中,我在几个文件中有几个“小部件”,它们充当模板。例如: 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 有和 '@' 来忽略错误。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 2012-05-18
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      相关资源
      最近更新 更多