其实这个问题我也找了半天,一开始也不知道是什么问题,后来在网上找了各种方法才能解决的,现在我来分享给大家。
错误:
本地调试一切正常,上传空间后head里的meta、link、js等都跑到body里,并在第一行产生空行。
firefox、chrome等非ie核心浏览器能较为正常运行,只是空行等小错误,但在ie里会导致整个排版出错。
解决办法:
一如本人上一个乱码问题的解决思路,这次依然是编辑器的设置问题
以dreamweaver为例:
编辑 =》首选参数 =》新建文档
包括Unicode签名(BOM)前面的勾选去掉。
如要修改已生成的文件,可以在 修改 =》页面属性 里的标题编码里,同样去掉BOM前面的勾选。这样上传到网站后就会恢复正常。
原因:
一般都能按以上方法解决问题,下面则是转自网络的具体原因~
原因是全部采用utf8编码,包含文档的时候,最后的二进制流中包含了多次UTF8 BOM标记,IE不能正常解析包含多个UTF8 BOM 标记的页面,直接替换成实际显示的回车,这样导致一个空行,而firefox却没有这个问题。
可是当我们创建一个很庞大的项目的时候肯定有很多文件,也包含了许多文件,这时候我们是很难找出到底那个文件才是包含BOM标签的,而这里我们来讲一下如何利用PHP程序来查找包含BOM标签的文件。
代码如下:
<?
//此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除
//By Bob Shen
$basedir="."; //修改此行为需要检测的目录,点表示当前目录
$auto=1; //是否自动移除发现的BOM信息。1为是,0为否。
//以下不用改动
if ($dh = opendir($basedir)) {
while (($file = readdir($dh)) !== false) {
if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")." <br>";
}
closedir($dh);
}
function checkBOM ($filename) {
global $auto;
$contents=file_get_contents($filename);
$charset[1]=substr($contents, 0, 1);
$charset[2]=substr($contents, 1, 1);
$charset[3]=substr($contents, 2, 1);
if (ord($charset[1])==239 && ord($charset[2])==187 && ord($charset[3])==191) {
if ($auto==1) {
$rest=substr($contents, 3);
rewrite ($filename, $rest);
return ("<font color=red>BOM found, automatically removed.</font>");
} else {
return ("<font color=red>BOM found.</font>");
}
}
else return ("BOM Not Found.");
}
function rewrite ($filename, $data) {
$filenum=fopen($filename,"w");
flock($filenum,LOCK_EX);
fwrite($filenum,$data);
fclose($filenum);
}