PHP或Apache是否影响DTD:在IE7标准模式下呈现XHTML的问题


Does PHP or Apache affect DTD: Problem with rendering XHTML in IE7 standard mode

我有一个静态HTML(index.html),下面有DOCTYPE,它将触发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验证指示空的第一行。

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

这是Apache或PHP的问题吗?谁有办法解决这个问题?

谢谢。

需要查看的是响应返回的字符编码。如果字符编码不是默认的(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验证器验证了文档?

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