doctype之前的空白问题

时间:2011-01-20 15:29:56

标签: php html

我遇到了一些奇怪的问题,我在2个不同的文件夹中有2个相同网站的副本。其中一个副本在doctype声明之前有空格,因此我在使用facebook时遇到问题,因为文档格式不正确。

在html之前有一些php计算,但是没有echo语句或其他东西。

在不同文件夹中的同一台服务器下的2个标识网站会出现什么情况,其中一个有此问题?

8 个答案:

答案 0 :(得分:10)

我几乎可以肯定你在PHP包含的末尾有一些尾随空格。先检查一下。

示例:

<?php
    // header file
    include 'other_file.php';
?><!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"><!-- etc.  -->

然后

<?php
    // other_file.php
    // connects to database, or something,
    // but notice the whitespace after the closing tag
?>



... pretend this text isn't here

我在最后添加了注释,以获取stackoverflow的降价编辑器,以显示关闭?>标记后的其他行。 PHP会在包含标记后自动截断一个换行符,但如果您有多个换行符,则会在doctype声明之前将其解释为空格。

最容易修复?从所有包含中删除结束标记?>。这是a valid technique,可能是您启动和运行的最快方式。

答案 1 :(得分:1)

您没有说明您遇到问题的浏览器。 IE用于检查页面的前几个字母是否为doctype,如果不是一个(如空格),则会进入怪癖模式。

答案 2 :(得分:0)

如果您使用包含,这种情况尤为常见。检查输出或标题之前的所有包含或其他php文件。

<?
   echo "php here"; 
?>

This will cause a problem if it's in an includes
that comes before your headers or doctypes. 
Remove any non php here, file should end with "?>"
not whitespace, linefeeds or characters.

至于为什么?未知,在一个生产服务器上这个问题引起了我的不断寻求(CentOs 5),但在我的开发机器(最新的Fedora)上,它没有发生,我没有问题。

老实说,我可能会找到一些东西来找出原因,但是由于正确使用说“没有额外的空间或线条”我只是这样做而且不要太担心“为什么在我的服务器上处理不同“那么多。 (我知道的那种警察)

答案 3 :(得分:0)

你可能不相信,但我有一种魔法解决这个问题:

使用CPanel的文件管理器将您的文档(包含在<!DOCTYPE之前)包含在主机上,然后选择文档并单击“编辑”以查看文档的源代码。 然后按 Ctrl + Home 然后按删除

你看到没有任何东西会被删除,但隐藏的空白区域!! 保存您的文档,您会注意到现在一切正常。

我为我的所有项目执行此操作

答案 4 :(得分:0)

在我的情况下,这很好用:

$ brew update
$ brew install coreutils
$ cd directoryWithSymfony2Project
$ for file in $(find ./ -name '*.twig' -or -name '*.php'); do sed `echo -e 's/[\xC2\xA0]//g'` $file > temp; echo 'Processing ' $file;rm $file; mv temp $file; done 

答案 5 :(得分:0)

我遇到了一个断线高于Doctype的地方。我尝试了一些事情然后最终将doctype放在php中。

<?php
echo '<!DOCTYPE html>';
... other php code/includes/etc ...
?>
<html>
... other html elements ...

不确定这是否是正确的方法,但它对我有用。如果您使用的是更广泛的doctype,则需要转义特殊字符。

答案 6 :(得分:0)

我只花了一天时间来解决这个问题,我的库在静态页面上运行良好,但在启动时使用主脚本的动态系统(apache mod_write重写所有主脚本)浏览器转换为后向compat模式(js: alert(document.compatMode()))并扭曲了我的样式。我所有的包含文件都正确结束,没有回声等。问题是什么?开头上方的空白行&lt;?php的主脚本.......

答案 7 :(得分:-1)

你在任何地方使用session_start()或header()吗?然后(没有outbutbuffering)在此函数之前,不允许空格或其他字符发送给客户端。