1

在 XHTML 1.0 strict (content="text/html) 上使用 HTML 4.01 strict 是否有任何优点?

4

2 回答 2

4

当然。您的代码会更小,因为您不需要"在单字属性上包含额外字符,/在自闭合元素上包含字符,您可以省略各种开始和结束标记,例如</p>, </li>, 甚至<html>, <head>, <body>, and等等在HTML 4.01 (和HTML5 )中是可选的。有关剥离 HTML 的一些技巧,请参阅优化 HTML优化HTML;其中许多建议仅适用于 HTML 4.01 或 HTML5。

现在,并不是每个人都需要缩小这么多;但如果你这样做了,使用 HTML 4.01(或 HTML5)而不是 XHTML 可能是有益的。

此外,Internet Explorer 实际上并不支持 XHTML 作为 XHTML。如果您将其发送为application/xhtml+xml,它只会尝试下载它。因此,如果您使用 XHTML,您需要将其作为 . 发送到 IE text/html,这将使浏览器将其解释为 HTML。关于为什么 XHTML 是一个坏主意的一些过时的讨论,请参阅HTML5 规范的当前编辑 Ian Hickson 的XHTML 被认为是有害的(其中一些原因仍然有效,其中一些不再相关)。

这里有一些例子:

  1. 格式良好的 XHTML,用作application/xhtml+xml
  2. 格式良好的 XHTML,用作text/html
  3. 格式不正确的 XHTML,用作application/xhtml+xml
  4. 格式不正确的 XHTML,用作text/html
  5. 格式良好的 HTML5,用作text/html

请注意,第一个在 IE 中不起作用。第二个适用于所有浏览器,但你只是在浪费字节;例如,浏览器不能正确解释命名空间,因此如果您在另一个命名空间中包含 XML,它实际上不会出现在脚本或 CSS 的另一个命名空间中。第三个将显示一条大错误消息,第四个将显示得很好,即使它不是格式正确的 XHTML(这表明浏览器正在使用它们的 HTML 解析器)。

通过使用 HTML 4.01 doctype 或 HTML5 doctype,您可以获得与示例完全相同的效果text/html,如第五个示例所示(如果您将 HTML 4.01 doctype 插入其中,这也是有效的 HTML 4.01)。如果您使用 HTML 4.01 或 HTML5,您可以节省大量空间,而且您不会因为有时将文档处理为 XHTML 而有时将其处理为 HTML 而自欺欺人。

另一个需要注意服务 XHTML 的原因text/html是它的处理方式不同,具体取决于它是由 HTML 解析器还是 XML 解析器解析的。例如,一个自闭合script标签,例如<script type="text/javascript" src="foo.js"/>, 在 XHTML 中有效,如果被 XML 解析器解析,将被解析为空元素。然而,在 HTML 中,这将被简单地视为一个脚本开始标记,并且它将“吃掉”文档的其余部分,因为解析器会一直解析假设它在脚本中,直到找到一个关闭标记。这很可能不是您想要的,如果您有时将文档视为 XML,有时将其视为 HTML,可能会令您大吃一惊。这是这个问题的一个例子;这两个文档在 Firefox 中显示不同,即使它们具有相同的内容(Safari 似乎将它们视为相同,因此此问题的程度因不同浏览器而异):

这不是 HTML 和 XHTML 解析器之间的唯一区别。在 HTML 中,即使源代码中没有,a<table>也会隐式插入 DOM;<tbody>在 XHTML 中,如果您没有明确指定 a <tbody>,它将不会出现在 DOM 中。

因此,与仅使用 HTML 4.01 或 HTML5 相比,提供 XHTMLtext/html将使您的代码更大,如果您有时将其作为真正的 XML 处理,有时将其视为 HTML,则会导致混淆。

于 2010-01-24T05:05:46.660 回答
0

是的:当您以 text/html 形式发送 HTML 4.01 时,您符合标准,但当您以 text/html 形式发送 XHTML 1.0 strict 时,您不符合标准。事实上,当您将 XHTML 作为 HTML 发送给浏览器时,浏览器会认为您发送给他们的是 HTML 4.01。

于 2010-01-24T05:05:58.737 回答