为什么要在HTML文件上放置XHTML doctype声明?那是做什么的?

时间:2012-01-15 17:49:10

标签: html xhtml doctype

我想知道我遇到的网页数量是HTML文件,但是它们带有XHTML DOCTYPE声明。
为什么人们这样做?他们希望实现什么目标?为什么不为实际的XHTML文件保留XHTML doctype声明?

或者我错过了什么?

编辑:对于“实际的XHTML文件”存在一些疑惑;为了证明差异不是由DOCTYPE声明引起的,请将this filethis one进行比较。第一个是HTML,第二个是XHTML,虽然内容相同;只有文件类型不同。两者在兼容的浏览器中都显示良好,但第一个用HTML解析器解析,第二个用XML解析器解析。

4 个答案:

答案 0 :(得分:11)

  

为什么要在HTML文件上放置XHTML doctype声明?那是做什么的?

所有这一切都是告诉标记验证者他们即将验证XHTML文档,而不是常规的,基于SGML的HTML文档。它描述了内容,或者更具体地说是后面的标记,但没有别的。

  

为什么人们这样做?他们希望实现什么目标?为什么不为实际的XHTML文件保留XHTML doctype声明?

     

或者我错过了什么?

有点儿。实际发生的事情是人们不知道只是在HTML文档上放置一个XHTML doctype声明并没有自动将它转换为XHTML文档,尽管这是每个人都希望的。

您看,大多数Web服务器和/或Web应用程序都没有配置为正确地将XHTML文档序列化为application/xhtml+xml,而是选择仅将网页作为text/html提供服务。 (对于服务器,它通常是因为.html文件扩展名比其他任何东西更重要,真的。)这导致浏览器决定他们收到一个普通的HTML文档,所以标签汤解析废话我们都来到知道和爱情不可避免地随之而来。

请注意,即使您的XHTML文档中有这样的元标记也没关系:

<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />

浏览器会忽略它,只会查看与XHTML文档一起发送的实际HTTP Content-Type标头。

更糟糕的是,作为XHTML鼎盛时期过去几年中最常用的浏览器,Internet Explorer在版本9最终发布之前从未正确支持application/xhtml+xml MIME类型:而不是解析标记,构建DOM并呈现页面,它所要做的就是要求下载文件。这不是一个非常有用的XHTML页面!

那么,猜猜在HTML5变得很酷之前我们必须忍受什么?

这与IE6在doctype声明之前带有XML声明的页面上的quirky之类的内容一样,也是导致XHTML垮台的最大因素之一(与XHTML 1.1一起从未获得广泛使用,以及XHTML 2.0被取消而支持HTML5)。

答案 1 :(得分:5)

大多数人都使用XHTML文档类型,因为他们在某个旧书中读取它或在论坛上阅读它,但在其他方面使用它是出于他们不知道的技术原因。几乎没有人通过将其作为application / xml + xhtml提供它来正确使用它。以text / html的形式提供XHTML页面意味着“标签汤”或“破碎的html”。它不应该被完成,但浏览器通常可以很好地处理它。

你对此感到疑惑。它让我发疯。

答案 2 :(得分:3)

我认为您使用text/html MIME类型而不是application/xhtml+xml来问为什么人们将XHTML文档作为HTML提供。

大多数情况下,这是因为对兼容性的错误理解:许多浏览器根本不理解XHTML + XML MIME类型,这导致用户只是将其作为HTML来解决这个问题。由于浏览器通常不会抱怨他们得到的内容,并且人们不会进行大量研究,因此大多数人都认为浏览器只是将XHTML文档化的文档视为XHTML,即使它是作为HTML提供的。但他们没有 - 他们将它们作为HTML服务。由于这两种语言非常相似,人们很少注意到这种差异。

所以不,你没有遗漏任何东西;这是非常糟糕的做法。如今,在HTML5之后,幸运的是,它似乎变得不那么常见了。

答案 3 :(得分:2)

关于XHTML的热闹之处在于,因为IE在XHTML受欢迎程度的高峰时并不理解XML mimetype(application/xhtml+xml),所以大多数人从未真正使用它的XML部分作为IE8并且更低的拒绝渲染内容。

这意味着数以百万计的网站认为他们正在使用符合标准的XHTML,而事实上他们被解析为格式错误/怪异的HTML4。

幸运的是,HTML5出现并正确定义了文档的解析,消除了围绕XHTML的所有歧义(所有过渡和严格的垃圾)。

在doctype之前添加XML prolog的人会给自己带来额外的伤害,因为在doctype之前的注释会导致旧的IE使用怪异模式,其中包括IE6及以下版本中的旧盒子模型。毫无疑问,这引起了IE6的大规模仇恨,因为在怪癖模式中,它存在严重的错误,导致现代布局被彻底打破,而不仅仅缺乏更新的功能。

简短的回答是,在这个行业中,许多人只是在不理解代码的情况下复制和粘贴代码。