PHP批量删除、清除UTF-8文件BOM头的代码实例

  记得运行代码前先把文件备份一下哦,避免出现失败问题。

  代码一:

  

复制代码 代码如下:

  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.");

  }

  代码二:

  

复制代码 代码如下:

  <?php

  header('content-Type: text/html; charset=utf-8');

  if(isset($_GET['dir'])){ //设置文件目录,如果没有设置,则自动设置为当前文件所在目录

  $basedir=$_GET['dir'];

  }else{

  $basedir='.';

  }

  $auto=1;/*设置为1标示检测BOM并去除,设置为0标示只进行BOM检测,不去除*/

  echo '当前查找的目录为:'.$basedir.'当前的设置是:';

  echo $auto?'检测文件BOM同时去除检测到BOM文件的BOM<br />':'只检测文件BOM不执行去除BOM操作<br />';

  checkdir($basedir);

  function checkdir($basedir){

  if($dh=opendir($basedir)){

  while (($file=readdir($dh)) !== false){

  if($file != '.' && $file != '..'){

  if(!is_dir($basedir.'/'.$file)){

  echo '文件: '.$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并已自动去除</font>');

  }else{

  return (' <font color=red>找到BOM</font>');

  }

  }else{

  return (' 没有找到BOM');

  }

  }

  function rewrite($filename,$data){

  $filenum=fopen($filename,'w');

  flock($filenum,LOCK_EX);

  fwrite($filenum,$data);

  fclose($filenum);

  }

  ?>

  代码三:

  

复制代码 代码如下:

  ##把该文件放在需求去除BOM头的目录下跑一下却可。

  <?php

  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) { // BOM

  // 的前三个字符的ASCII

  // 码分别为

  // 239

  // 187

  // 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 );

  }

  ?>

  二、Python

  

复制代码 代码如下:

  #!/usr/bin/env python

  #-*- coding: utf-8 -*-

  import os

  def delBOM():

  file_count = 0

  bom_files  = []

  for dirpath, dirnames, filenames in os.walk('.'):

  if(len(filenames)):

  for filename in filenames:

  file_count += 1

  file = open(dirpath + "/" + filename, 'r+')

  file_contents = file.read()

  if(len(file_contents) > 3):

  if(ord(file_contents[0]) == 239 and ord(file_contents[1]) == 187 and ord(file_contents[2]) == 191):

  bom_files.append(dirpath + "/" + filename)

  file.seek(0)

  file.write(file_contents[3:])

  print bom_files[-1], "BOM found. Deleted."

  file.close()

  print file_count, "file(s) found.", len(bom_files), "file(s) have a bom. Deleted."

  if __name__ == "__main__":

  delBOM()