IE以Quirks模式呈现我的页面

时间:2013-08-29 17:22:59

标签: html internet-explorer doctype quirks-mode

我花了几个小时试图解决几个问题并让自己感到困惑。

当在IE8中查看该网站时,它似乎进入怪癖模式,我说似乎我无法访问该机器,只有一个屏幕打印,但复制我必须选择Quirks表单开发工具的混乱。

该网站相当复杂。在每个页面的顶部调用一个php init文件,依此类推。

索引目前看起来像:

<?php require'core/init.php';?>
<?php include_once 'include/IE8Etc.php';?>
<!doctype html>
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<html>
<head>
<meta charset="UTF-8">
<title>Title</title>

IE8Etc和IE = Edge是最新增加的内容。然后我读到IE将进入这种模式,如果doctype不是它看到的第一件事,那么评论可能会导致问题。

这适用于我之前拥有的php吗?我的doctype声明应该保留在原来的位置还是应该移动到init页面的顶部。即使我写它,这听起来像一个荒谬的问题,我确信它在哪里很好,但我需要确定。

感谢。

3 个答案:

答案 0 :(得分:1)

问题

两个<?php ?>代码段后的换行符都计为字符。如果Internet Explorer在doctype声明之前检测到字符(甚至是空格),则会进入怪异模式。正如EricLaw正确指出的那样,你还应该考虑将所有元标记移动到head部分,并整合你的php代码。

解决方案

正确的代码如下所示:

<?php
  require'core/init.php';
  include_once 'include/IE8Etc.php';
?><!doctype html>
<html>
  <head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
    <title>Title</title>

答案 1 :(得分:1)

您在问题中提到的关于需要成为页面中第一件事的doctype的观点适用于浏览器看到的页面

如果不生成任何输出,PHP代码的内容完全无关紧要。

但是,如果PHP正在生成输出 - 即使输出只是一个空行 - 那么它将使doctype无效。

所以你要做的第一件事是在浏览器中打开页面,然后选择“查看源代码”选项。查看浏览器收到的实际HTML。如果在doctype之前有任何内容,则需要移动或删除它。

完成后,第二件事就是通过W3C Validator运行您的网页。这将告诉您页面上可能存在的任何其他HTML错误。您至少有一个,因为<meta>标记需要位于<head>标记内,但也可能存在其他错误。某些HTML错误可能会使浏览器进入怪异模式,因此您应该修复验证程序报告的任何内容(尽管doctype问题是迄今为止最常见的原因)。

跳跃有帮助。

答案 2 :(得分:0)

DOCTYPE前面的空格可能来自以{1}}(字节顺序标记)开头的以UTF-8编码保存的文件。删除BOM(在Notepad ++中另存为ANSI UTF-8)后,DOCTYPE是正确的,但它仍然进入Quirks模式,直到添加了IE-Edge的元标记/标题。