zoukankan      html  css  js  c++  java
  • 批量清除BOM(PHP文件头的空白行)

    BOM: Byte Order Mark 
    UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支援UTF-16,UTF-32才加上的BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行.

    类似WINDOWS自带的记事本等软件,在保存一个以UTF-8编码的文件时,会在文件开始的地方插入三个不可见的字符(0xEF 0xBB 0xBF,即BOM)

    PHP的生成图片函数(imagepng(), imagegif(), imagewbmp(), imagejpeg() 和 imagetypes())的文件或者相关的引入文件包含BOM,会导致生成发生错误,常见的如Discuz的验证码生成程序。

    以下是PHP代码

    <?php   
    if (isset($_GET['dir'])){ //设置文件目录   
    $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);   
    }   
    ?>

  • 相关阅读:
    HDU 1081 To The Max (DP) 扩展最大子列和,求最大子矩阵和
    How to Log SOAP Message Content in Metro?(官方解答)
    纪晓岚与和珅对调后的工作困难
    蒙版
    2011年选拔赛C本科
    网络常用语
    linux怎么用一个命令行统计出给定目录中有多少个子目录
    REGSVR32
    香水
    判断一个数是否是2的平方
  • 原文地址:https://www.cnblogs.com/mskycn/p/2861474.html
Copyright © 2011-2022 走看看