0

我有一个带有 DOCTYPE 下面的静态 HTML(index.html),它将触发 IE7 中的标准模式:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>

然后我将页面转换为三个 PHP HTML 模板:header.html.php、index.php、footer.html.php。并且 header.html.php 包含上面的确切 DOCTYPE。

但是每次我在 IE7 中声明 index.php 时,它都会打乱渲染。

我已经使用该命令javascript:alert(document.compatMode)在 IE7 和 FF3 中进行了测试

对于静态html页面,IE7和FF3都给我CSS1Compat,是我期待的模式;但是对于 PHP 生成的页面,FF3 给我 CSS1Compat,而 IE7 给我 BackCompat。

这是我认为问题所在: 我从 IE7 下载了页面,发现 DOCTYPE 变成<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">了没有地址。

但是在ff3和chrome中下载相同的PHP生成页面,DOCTYPE是正确的<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

当我测试页面时,毫不奇怪,W3C 验证器获取的源代码的第一行是# <!-- A customized tag to distinguish different pages --> # <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

W3C 验证指示空的第一行。

我已经删除了所有静态 PHP 文件和 CSS 文件的 BOM,但我仍然遇到问题。

这是 Apache 还是 PHP 的问题?有人有解决这个问题的线索吗?

谢谢。

4

2 回答 2

2

要研究的一件事是您的响应返回的字符编码。如果字符编码不是默认值(UTF-8 或 -16),那么您应该包含一个 xml 声明:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html 
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

因为您在其他浏览器中获得了适当的内容,所以我怀疑有什么导致 IE 阻塞,所以它正在将其更改为更宽松的文档类型。

您是否使用 W3C 验证器验证了文档?

于 2011-04-13T05:17:00.253 回答
0

不,这不是 apache 或 php 问题。这是生成响应的代码问题。

于 2011-04-13T04:26:48.813 回答