删除文件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); 
     } 
?>

你可能感兴趣的:(删除文件bom的php代码)