【问题标题】:Doctype meta and quirksmodeDoctype meta 和 quirksmode
【发布时间】:2012-11-22 20:54:53
【问题描述】:

请我在这里澄清一些想法:

如果没有指定文档类型,则会调用 Quirksmode。

但是

当从 localhost 提供服务时,无论文档类型如何,IE 似乎都会进入 quirksmode。请确认一下,有人可以解释为什么会这样。

然而

当从 localhost 提供服务并且 IE 进入 quirksmode 时,无论文档类型如何,都可以通过在头部的第一行包含元标记来覆盖它

<meta http-equiv="X-UA-Compatible" content="IE=edge">

这对我不起作用...我的语法错误吗?

只有在从 localhost 提供服务时才会应用头部中的元数据?如果是这样,这是真的吗?

目前在 FF Chrome Opera 等中一切看起来都很好,无论是从本地主机还是通过网络提供服务。

但我只是在 IE 中获得了 quirks 模式

我的文档类型是

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

charset和quirksmode之间终于有关系了吗?

我一直在用

<meta http-equiv="content-type" content="text/html; charset=utf-8" />       

在 apache 上将 apache 配置设置为默认为 UTF-8

【问题讨论】:

标签: html xhtml doctype quirks-mode


【解决方案1】:

Quirks Mode 很古怪,你不应该依赖任何关于它的特定内容。触发它的情况是依赖于浏览器的,但是如果你看到了一个符合 XHTML 规范的 XHTML 文档类型来触发它,那么它可能是一个观察错误。你可能有例如文档类型之前的一些东西。同样适用于 IE 的神奇 meta 标签。

您可能有语法错误,但不是在发布的 sn-ps 中。

或者问题可能是由 doctype 嗅探中的某些 IE8 and IE9 complications 引起的。

charset 和 Quirks Mode 之间没有关系。

【讨论】:

  • 好的,我确实在这里感到困惑。并非所有内容都可以是第一行代码。我使用带有缓冲的重定向,因此我的 php 初始化包含可以不在第一行中。我可以确认您是说文档类型应该在任何包含之前吗?同上元的
  • @codepuppy,不,PHP 指令在服务器内部。它们不会发送到浏览器,因此它们不会影响浏览器的模式选择,除非指令在文档中生成一些内容。
  • @codepuppy,如果您的文件以 PHP 指令开头并且您从文件本地打开文件,那么该指令将出现在浏览器看到的文档中,并且会搞砸。如果您的意思是从系统中本地运行的 http 服务器 (localhost/...) 打开它,那么该服务器可能与 Web 服务器不同(可能 PHP 已禁用?)。
  • 我的意思是后者。两台服务器都是apache。两者都启用了 PHP。
  • @codepuppy,也许服务器的行为仍然不同;在浏览器中使用 View Source 查看是否有差异。
【解决方案2】:

两件事,你可以试试IE=8之类的......

您可能还想检查文档类型;不过,它看起来是正确的,您可能有隐藏字符等....尝试使用会显示隐藏字符的基本编辑器。

对于VI,您可以查看:http://www.chrispian.com/quick-vi-tip-show-hidden-characters/

这对我来说是第一步。

【讨论】:

    【解决方案3】:

    简答

    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    

    是哪里出错了,因为你说它是text/html 而你的文档类型是 xhtml。你应该使用application/xhtml+xml

    更长的答案

    在我看来,您似乎没有正确研究XHTML 究竟是什么。这是一种非常奇怪的文件。 XHTML 应该是对传统 HTML 的改进,但它从未真正流行起来,通常不建议您使用它除非您有非常具体的原因

    看看this web site。一些重要的部分:

    XHTML 1.1

    对于 1.1 版本的 XHTML,规范很明确:text/html 不得使用。 XHTML“本机”内容类型 应该使用 application/xhtml+xml,而通用 XML 内容 可以使用 application/xml 的类型。

    这种内容类型的汤给我们留下了一个相当清晰的过程 1.1 的行动:如果我们使用 XHTML 1.1 2,我们应该服务 application/xhtml+xml 作为内容类型。

    这是你的问题:

    恐怖!恐怖!

    你已经猜到了。提供一份包含所有内容的文件 意图和目的 XHTML as text/html 仅仅意味着 浏览器 将跳入纠错模式并处理。

    【讨论】:

    • 这个答案是完全错误的——对不起!注释太短,无法详细解释,但在大多数 IE 中使用 application/xhtml+xml 会破坏您的页面,并且如果您有任何错误,将导致它无法在其他浏览器中呈现。 XHTML1.1 基本上不受支持,也不应该使用。 XHTML1.0 是毫无意义的,因为您已经提到了一些原因。 codepuppy 应该确保 doctype 之前没有新行,并且最好使用 HTML5 以尽量减少出错的机会。
    • 好吧,我不会说没有研究过这个,因为我有,但可能是我的理解不足。我选择 xhtml 的原因是为了确保我遵守标准。包含字符集元的原因是为了消除我在 FF 中遇到的字符集错误。 IE。它要求 UTF-8。因此,如果我理解正确,除了我使用的语法与 doctype 冲突导致浏览器默认为 quirksmode 之外,charset 和 quirksmode 之间没有任何关系。 . @Rich
    • 我确实注意到了 html 5 doctype 我已经阅读了几篇关于此的帖子。我不清楚的是这是否向后兼容。看来这在这里得到了回答......即它是。 @Rich
    • doctypes 的想法在你考虑的时候有点傻——你为什么会想要 quirks 模式? HTML5 doctype 被设计为不会触发 quirks 模式的最短代码(no doctype = quirks)。 XHTML 最终陷入了死胡同,部分原因是 IE 不支持它,部分原因是它太容易破坏整个站点(任何无效的 XHTML 1.1 = 没有站点)。使用&lt;meta charset="utf-8" /&gt; 作为字符集,但也要确保PHP/Ruby/Python 发送像Content-Type: text/html; charset=utf-8 这样的标头。标题对于工作更重要。
    • @Rich 澄清除了 我的初始化包含应该包含
    【解决方案4】:

    我想总结一下这个问题的发现。

    在 IE9 中关闭兼容模式

    1. 在 IE 9 中右键单击工具图标并选择命令栏
    2. 从命令栏选择工具
    3. 从工具中选择兼容性视图设置
    4. 取消选中以兼容模式显示 Intranet 站点
    5. 从命令栏选择工具确保未选中兼容性视图
    6. 重启浏览器

    修改代码的要点

    • html 5 doctype 简化了设置 doctype 的整个问题。
    • charset 和 quirksmode 之间似乎存在关系的原因是元数据中添加该字符集的错误,这使其与 doctype 发生冲突。

    所以操作完成以解决问题。

    1. 忽略 localhost quirksmode - 这仅在测试时很重要。
    2. 使用 &lt;!Doctype html&gt; 确保 html 文档以此开头。 N:B 这并不意味着这必须是 HTML 的第一行。 php 包含可以在它之前。

    3. &lt;head&gt;中使用&lt;meta charset="UTF-8"&gt;

    4. 在php初始化中使用&lt;?php header("content-Type: text/html; charset=utf-8"); ?&gt;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-25
      • 2023-03-05
      • 2020-10-26
      • 1970-01-01
      • 2013-07-28
      • 1970-01-01
      • 2011-07-04
      • 1970-01-01
      相关资源
      最近更新 更多