1

在过去的几个小时里,我一直在尝试解决几个问题并使自己感到困惑。

当在 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 是最近添加的。然后我读到如果 doctype 不是它看到的第一件事并且评论可能会导致问题,IE 将进入此模式。

这适用于我之前的 php 吗?我的 doctype 声明应该留在原处还是应该移动到初始化页面的顶部。即使在我写它的时候,这听起来也是一个荒谬的问题,我确信它在哪里很好,但我需要确定。

谢谢。

4

3 回答 3

1

问题

<?php ?>两个片段之后的换行符都算作字符。如果 Internet Explorer 在 doctype 声明之前检测到字符(甚至是空格),它会进入 quirks 模式。正如 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>
于 2013-08-29T19:09:17.593 回答
1

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

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

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

因此,您应该做的第一件事是在浏览器中打开该页面,然后选择“查看源代码”选项。查看浏览器接收到的实际 HTML。如果文档类型之前有任何内容,则需要将其移动或删除。

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

跳,有帮助。

于 2013-08-29T20:30:08.903 回答
0

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

于 2014-07-14T12:56:56.307 回答