使用PHP DomDocument区分HTML和XML

4

有没有一种方法可以使用PHP DomDocument区分XML和HTML?

我查看了文档,但没有找到任何相关内容。

我正在寻找一个类似于check($string)的函数,它会为每个$string返回'is XML''is HTML'

这里SO中的类似 问题 没有帮助我。


1
我不这么认为!因为HTML是XML的一种类型!所以它们是相同的!你必须通过检查代码、媒体类型等来找到解决方案。 - Cyrus Raoufi
1
@CyC0der:不,HTML不是一种XML类型。XHTML是,但不是HTML。 - hakre
2个回答

2
没有这样的函数,但是当DOMDocument::loadXML()返回true(将恢复设置为false)时,您可以放心某些$string是格式良好的XML。HTML文档会失败。
对于HTML,您可以使用DOMDocument::loadHTML()来检查是否可以将文档加载为HTML。HTML不像XML那么严格。

谢谢@hakre。看起来没问题,但是代码 $dom = new DOMDocument(); $var = $dom->loadXML("<html><body>Test</body></html>"); print_r ($var);die(); 返回1。有什么问题吗? - James
它应该返回“bool(true)”,请参见此处:https://eval.in/413856 - 这是可以接受的,因为字符串已经是格式良好的XML。 - hakre
实际上,你是对的。我没有注意到这个字符串是一个格式良好的XML。我用其他HTML进行了测试,结果非常好,返回了bool(false) - James
1
可能有一种情况是HTML文档是格式良好的XML。在这种情况下,您也许想检查->documentElement字段的DOMElement::$tagName是否为"html"。不区分大小写进行比较。这将是一个强烈的信号,表明这是一个HTML文档。 - hakre

0
使用preg_match扩展。 示例:
if( preg_match('/<html[^>]*>/', $string) ) {
{
  // ... actions for XML ...
} elseif( preg_match('/<\?xml[^?]*\?>/', $string) ) {
  // ... actions for HTML ...
} else {
  // ... actions for another ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接