我遇到了一些奇怪的问题,我在2个不同的文件夹中有2个相同网站的副本。其中一个副本在doctype声明之前有空格,因此我在使用facebook时遇到问题,因为文档格式不正确。
在html之前有一些php计算,但是没有echo语句或其他东西。
在不同文件夹中的同一台服务器下的2个标识网站会出现什么情况,其中一个有此问题?
答案 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)在此函数之前,不允许空格或其他字符发送给客户端。