【问题标题】:Differentiating between XHTML and HTML with PHP DOMDocument用 PHP DOMDocument 区分 XHTML 和 HTML
【发布时间】:2012-08-10 14:41:39
【问题描述】:

我想使用 PHP DOM 实现来操作 HTML 和 XHTML 文档。我使用 DOMDocument->loadHTML() 方法来加载内容。

想知道加载的内容是 XHTML 还是 HTML。 DOMDocument 有一个 doctype 对象,其中包含来自文档本身的 DOCTYPE 声明。到目前为止,我考虑过比较 $dom->doctype->publicId ,其中包含诸如“-//W3C//DTD HTML 4.01//ENtext/html”之类的字符串

有没有人能想到的更好的方法?

编辑:

对不起,如果我的问题有点不清楚。我更新了这个问题,因为它可能令人困惑。但现在要说清楚:这个问题不是关于使用 PHP DOM 处理 HTML,也不是关于 XHTML 是好是坏。

【问题讨论】:

  • 为什么不直接修复源文档而不是产生额外的服务器开销?
  • 修复是什么意思?我从来没有说过他们坏了。源文档是用户提供的所有内容。所以可能有一个有效的 DOCTYPE 声明。它也可能丢失。我实际上只是好奇是否有人知道另一种或更好的方式来判断它是 XHTML 还是 HTML,而不是使用 DOMDocument->doctype。
  • 很确定你加载为html,你应该保存为html。它应该维护原始文档类型声明。您可以使用 DOM validate 方法根据文档类型声明来确定文档是否有效。如果代码无效,您应该让用户修复代码。
  • dqhendricks,您的评论根本没有帮助。 “很确定它作为 html 加载,你应该保存为 html”通常听起来是正确的,但在 PHP DOM 的情况下则不然。如果要处理无效标记,则必须使用 loadHTML() 方法。我什至没有询问验证。如果代码无效完全超出范围,用户是否必须修复他的代码。这个决定是业务需求,而不是技术需求。

标签: php html dom xhtml


【解决方案1】:

如果您从外部源加载,您可以检查文件的 MIME 类型并查看它是否为 application/xhtml+xml;如果是的话,它肯定是 XHTML(当然它可以使用这种类型,但标记格式非常错误)。否则,如果它是text/html,那么它将被解析为 HTML 标签汤。除了实际标记的有效性,doctype 声明是您判断内容是(或声称是)HTML 还是 XHTML 的下一个最佳方式。

如您所说,您可以检查公共标识符和/或 URI 并从那里确定类型。

【讨论】:

  • 好的。所以我现在对 XHTML 的测试是:“strpos(strtolower($dom->doctype->publicId), 'xhtml') !== false”。如果不是这种情况,那么我认为它是 HTML。你怎么看?
  • @Alex:听起来不错,因为浏览器最常接收的页面是text/html,所以这是一个合理的假设。您可以使用stripos() 代替strpos(strtolower())
猜你喜欢
  • 2015-10-28
  • 2011-10-11
  • 2019-10-09
  • 2011-11-24
  • 2013-02-08
  • 1970-01-01
  • 2011-02-04
  • 2010-11-12
  • 1970-01-01
相关资源
最近更新 更多