资讯动态 news



掉UTF-8文件的BOM的方法,require引起的空白

发布于:2016-01-04 21:03   浏览:
今天编辑我的系统,突然发现使用require_once(无论是require还是include都一样)包含进来的文件会带来页面一个空白,文件编码是utf-8,怎么也解决不了,于是上网查询相关资料,结果发现是由于u

今天编辑我的系统,突然发现使用require_once(无论是require还是include都一样)包含进来的文件会带来页面一个空白,文件编码是utf-8,怎么也解决不了,于是上网查询相关资料,结果发现是由于utf-8的BOM引起,当务之急肯定是要删除BOM这个东西,因为他不被IE处理而直接输出(firefox好像没这个现象),至于怎么去除了,方法有很多,可以用编辑器,也可以用程序,下面我就是找了一个用程序一次性处理的代码,感觉不错,贴出来共享给朋友们:

编辑器解决方法:

EmEditor软件,先打开任意一个PHP文件,按Alt+回车,选择“文件”的标签,在“打开时的字符码”,选择“UTF-8”,然后关闭EmEditor。以后打开任何PHP文件,只要按Ctrl+S,或者Ctrl+E,就可以保存为UTF-8编码的无BOM文件,十分方便。

UltraEdit可以点击“文件→另存为”,格式选择“UTF-8无BOM”,英文网页每次都需要这个操作。否则,在按Ctrl+S时,会被保存为ANSI格式。中文网页,在第一次另存为之后,以后只要按Ctrl+S即可。

EmEditor也可以用同样的方法,“文件→另存为”,字符码选择“UTF-8”,去掉“加入 Unicode 署名”前面的勾,英文网页每次都需要这个操作。同样,中文网页,在第一次另存为之后,以后只要按Ctrl+S即可。EmEditor建议按照第一段文字的方法设置,以后无需每次都使用“另存为”。

这段php程序如下,保存成php文件放在根目录中执行一次就行了,会自动去除文件头中的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>");