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);   
    }   
    ?>

  • 相关阅读:
    DAY 06 PYTHON入门
    DAY 05 PYTHON入门
    DAY 04 PYTHON入门
    DAY 03 PYTHON入门
    DAY 02 PYTHON入门
    DAY 01 PYTHON入门
    RTC时钟和BKP的配置stm32
    Altium Designer画原理图时要紧凑
    串口的数据长度校验
    Centos7下创建文件夹 移动文件/文件夹 删除文件/文件夹 解压/文件夹打包压缩 命令整理
  • 原文地址:https://www.cnblogs.com/mskycn/p/2861474.html
Copyright © 2011-2022 走看看