【问题标题】:Differentiating HTML and XML with PHP DomDocument用 PHP DomDocument 区分 HTML 和 XML
【发布时间】:2015-10-28 18:05:22
【问题描述】:

有没有办法通过 PHP DomDocument 区分 XML 和 HTML?

我查看了docs 并没有找到任何东西。

我正在寻找像 check($string) 这样的函数,它为每个 $string 返回 'is XML''is HTML'

SO 中的这些 similar questions here 对我没有帮助。

【问题讨论】:

  • 我不这么认为!因为 HTML 是一种 XML!所以他们是一样的!您必须通过检查代码、矿山类型等来找到解决方案。
  • @CyC0der:不,HTML 不是一种 XML。 XHTML 是,但不是 HTML。

标签: php html xml domdocument


【解决方案1】:

使用preg_match 扩展名。 示例:

if( preg_match('/<html[^>]*>/', $string) ) {
{
  // ... actions for XML ...
} elseif( preg_match('/<\?xml[^?]*\?>/', $string) ) {
  // ... actions for HTML ...
} else {
  // ... actions for another ...
}

【讨论】:

    【解决方案2】:

    没有这样的功能,但是当DOMDocument::loadXML()返回true(将recover设置为false)时,您可以放心,某些$string是格式良好的XML。 HTML 文档会因此而失败。

    对于 HTML,您可以使用 DOMDocument::loadHTML() 检查是否可以将文档加载为 HTML。 HTML 不像 XML 那样严格。

    【讨论】:

    • 谢谢@hakre。它看起来正确,但代码 $dom = new DOMDocument(); $var = $dom-&gt;loadXML("&lt;html&gt;&lt;body&gt;Test&lt;/body&gt;&lt;/html&gt;"); print_r ($var);die(); 返回 1。有什么问题?
    • 它应该返回 ``bool(true)`,参见这里:eval.in/413856 - 这很好,因为字符串 格式良好的 XML。
    • 其实你是对的。我没有注意到该字符串是格式正确的 XML。我用其他 HTML 进行了测试,效果就像返回 bool(false) 的魅力
    • HTML 文档可能是格式良好的 XML。在这种情况下,您可能还想检查-&gt;documentElement 字段的DOMElement::$tagName 是否为“html”。比较不区分大小写。这将是一个强烈的信号,表明这是一个 HTML 文档。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 2012-05-06
    • 2011-11-24
    • 2013-02-08
    相关资源
    最近更新 更多