php多返回\ufeff

来源:互联网 发布:2016淘宝小号直销商 编辑:程序博客网 时间:2024/06/06 04:28
今天上午挺意外的发现服务器恢复,但我的Movie Castle页面显示却很奇怪...全屏,且上方多了一行小空行,测试浏览器为IE7.然后去Firefox下查看,发现页面的Width正常,但上方的小空行依然存在-.-


  我是善于Google的人,于是遇到不明白的先询问这本百科全书. 得到的答案是主题PHP文件编码是UTF-8 with bom造成的,至于这个bom是什么,看下这个中文解释吧.


在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little- Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。


UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。


Windows就是使用BOM来标记文本文件的编码方式的。


  很显然...我的小空行是因为这个bom而产生的.


  找到问题后的就是解决问题.去WP群里问了声,得到了一些建议,但个人觉得CSS样式之前在相同的环境下没有一点问题,没理由现在突然显示不 了! 还是先解决已知问题吧...Google告诉我了很多去除bom的方法,但操作上来讲都有点烦,最后终于找到了个称心如意滴~muhahaha 一个自动移除bom的小程序...备份后大胆的试用,果然问题立刻解决.


<?php
//remove the utf-8 boms
//by magicbug at gmail dot com
if (isset($_GET['dir'])){ //config the basedir
 $basedir=$_GET['dir'];
}else{
 $basedir = '.';

$auto = 1; 
checkdir($basedir);
function checkdir($basedir){
 if ($dh = opendir($basedir)) {
  while (($file = readdir($dh)) !== false) {
   if ($file != '.' && $file != '..'){
    if (!is_dir($basedir."/".$file)) {
     echo "filename: $basedir/
$file ".checkBOM("$basedir/$file")." <br>";
    }else{
     $dirname = $basedir."/".
$file;
     checkdir($dirname);
    }
   }
  }
 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);
}
?>
步骤:


1.Copy代码到txt文档中,保存成php后缀的文件,命名为111.php


2.将111.php放在网站根目录下


3.打开浏览器,执行http://root/111.php


4.一切困扰都解决鸟...空行没了,CSS样式也显示正常了.


  撰文留念之...用这个方法可远比将php文件一个个另存为utf-8 without bom方便呢!!!
0 0