其实这个问题我也找了半天,一开始也不知道是什么问题,后来在网上找了各种方法才能解决的,现在我来分享给大家。
错误:
本地调试一切正常,上传空间后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); }