【问题标题】:Why put an XHTML doctype declaration on HTML files? What does that do?为什么要在 HTML 文件上放置 XHTML doctype 声明?那有什么作用?
【发布时间】:2012-01-15 17:49:10
【问题描述】:

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

还是我错过了什么?

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

【问题讨论】:

  • “实际的 XHTML 文件”是什么意思?具有有效 XHTML 内容的那些?
  • 否,文件类型为 XHTML; .xhtml 后缀; application./xhtml+xml MIME 类型...
  • 虽然他们现在已经转换为 HTML5,但多年来 W3Schools 一直这样做,并提倡这种方法。虽然它们不是唯一的原因,而且我无法直接或间接地评论个人决定,但它们一定影响了很多网站。
  • @Alohci:你的意思是仅仅在 XHTML doctype 上拍打而忘记其他一切?
  • @BoltClock - 不完全是。只是他们将页面标记为 XHTML 并将其作为text/html 提供服务。他们对转换的描述以及他们网站的 XHTML 页面中的任何其他内容都没有讨论过 mime 类型的重要性或相关性。

标签: html xhtml doctype


【解决方案1】:

为什么要在 HTML 文件中添加 XHTML doctype 声明?那有什么作用?

所做的只是告诉标记验证器他们将要验证一个 XHTML 文档,而不是一个常规的、基于 SGML 的 HTML 文档。它描述了内容,或者更具体地描述了随后的标记,但仅此而已。

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

还是我错过了什么?

有点。实际发生的情况是人们不知道只是将 XHTML doctype 声明放在 HTML 文档之上并不会自动将其转换为 XHTML 文档,尽管这是公认的这是每个人都希望的。

您会看到,大多数 Web 应用程序都没有配置为将 XHTML 文档正确序列化为 application/xhtml+xml,而是选择将页面作为 text/html 提供服务。 (这通常是因为.html 文件扩展名比其他任何东西都重要;一般来说,服务器确实正确地将application/xhtml+xml 应用于以.xhtml.xht 作为扩展名的文档,但只有实际使用的静态站点的文件格式将受益于此。)这导致浏览器决定他们收到了一个常规的 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)。

【讨论】:

  • 其实我喜欢 XHTML。如果我想确保我的页面是正确的,我不必上传它们然后在它们上释放验证器,我所要做的就是尝试将它们加载到我的浏览器中。当然,我可以提供带有 XHTML doctype 的 HTML5 文档,但这不一样。一方面,我不知道浏览器会使用 XML 还是 HTML 解析器。
  • @Mr Lister:我也喜欢。不过,您可以只提供正确的 MIME 类型,现代浏览器(包括 IE9+)会将您的文档视为 XHTML。 (附带说明,“具有 XHTML doctype 的 HTML5 文档”并没有真正的意义 :)
  • 该死,来不及编辑。我的意思是带有 XHTML 内容类型的 HTML5!
【解决方案2】:

大多数人使用 XHTML doctype 是因为他们在某处的旧书中阅读它或在论坛上阅读它,但在其他情况下使用它是出于他们不知道的技术原因。几乎没有人通过将其作为 application/xml+xhtml 来正确使用它。将 XHTML 页面作为 text/html 提供服务意味着“标签汤”或“损坏的 html”。不应该这样做,但浏览器通常可以很好地处理它。

您对此的疑惑是正确的。它让我发疯。

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 大多数编写 XHTML 的人都将其用作text/html,此时您将失去大部分优势。例如,在这种情况下,所有浏览器都将其视为 HTML。阅读Sending XHTML as text/html Considered Harmful
    • “为什么人们将 XHTML 文档作为 HTML 提供,使用 text/html MIME 类型而不是 application/xhtml+xml。”是另一种说法,是的。那么好吧。我不确定您从哪里得到反对票;可能是不完全理解的人。
    • @Mr Lister:在投票后,答案被编辑成完全不同的东西。要么downvoter从未跟进,要么......他们不明白:)
    【解决方案4】:

    XHTML 的有趣之处在于,由于 IE 在 XHTML 流行的高峰期不理解 XML mimetype (application/xhtml+xml),因此大多数人从未真正将其中的 XML 部分用作 IE8,并且拒绝渲染内容.

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

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

    在 doctype 之前添加 XML prolog 的人对自己造成了额外的伤害,因为在 doctype 之前添加注释会导致旧 IE 使用 quirks 模式,其中包括带回 IE6 及更低版本中的旧框模型。这无疑导致了人们对 IE6 的厌恶,因为在 quirks 模式下,它存在严重的错误,导致现代布局完全被破坏,而不仅仅是缺少新功能。

    简短的回答是,在这个行业中,很多人只是复制和粘贴代码而不理解它。

    【讨论】:

    • IE 可以很好地理解 XML。这是它不支持的 XHTML 部分。
    • 这不是“XHTML 的有趣之处”。这真是太可悲了,这是 IE 总是阻碍网络的完美例子。
    • @Rob,真的。我也不确定他们为什么这么长时间没有解决这个问题。我几乎怀疑他们出于某种原因并不真正希望网络转向 XML。
    • @BoltClock - 你是什么意思,他们只为 HTML5 做的?从浏览器的角度来看,HTML5 向后兼容早期版本。没有建议也不支持早期的 XHTML 版本。事实上,我的网站将 XHTML 1.0 作为应用程序/xhtml+xml 提供给 IE9,它对此非常满意。
    • @RichBradshaw “幸运的是 HTML5 出现并正确定义了文档的解析” HTML 4 和更早的解析也得到了正确定义。最初没有浏览器供应商愿意正确实施解析,后来网络变得如此混乱,修复 HTML 解析意味着几乎没有任何网站会按预期显示。
    猜你喜欢
    • 1970-01-01
    • 2010-10-15
    • 2015-12-22
    • 2011-01-09
    • 2015-08-04
    • 2019-11-12
    • 1970-01-01
    • 2013-10-15
    • 2014-11-08
    相关资源
    最近更新 更多