删除文件bom的php代码

php程序放到服务器上,其它都正常了,在调用xml数据时,FF下测试正常,但在IE下出错,每次显示出来的长度不一样,httpwatch抓包看了一下正常,看来服务器上的内容是正常的。

问题分析:猜测原因:汉字造成的?但马上被否定了,因为纯xml文件上传到服务器上,CDATA中有汉字,也能正常显示

分析结果:最后发现,原来是bom造成的

下面是去掉BOM的代码:

//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); 
     } 
?>
posted @ 2012-05-10 22:12  苔苔以苔苔以苔  阅读(1442)  评论(0编辑  收藏  举报
猪先飞