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


Posted in PHP onApril 14, 2014

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

代码一:

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()

为了方便大家使用,这里三水点靠木小编分享一个BOM工具方便大家检测。

下载地址:https://3water.com/softs/496779.html

PHP 相关文章推荐
用PHP连mysql和oracle数据库性能比较
Oct 09 PHP
解决php中Cannot send session cache limiter 的问题的方法
Apr 27 PHP
php判断字符以及字符串的包含方法属性
Aug 30 PHP
PHP 采集程序 常用函数
Dec 18 PHP
php轻松实现中英文混排字符串截取
May 28 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
PHP中$this和$that指针使用实例
Jan 06 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
CI框架封装的常用图像处理方法(缩略图,水印,旋转,上传等)
Nov 22 PHP
THINKPHP3.2使用soap连接webservice的解决方法
Dec 13 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
Apr 21 PHP
在laravel中实现事务回滚的方法
Oct 10 PHP
thinkphp实现数组分页示例
Apr 13 #PHP
不使用php api函数实现数组的交换排序示例
Apr 13 #PHP
php读取大文件示例分享(文件操作类)
Apr 13 #PHP
php使用smtp发送支持附件的邮件示例
Apr 13 #PHP
php实现上传图片生成缩略图示例
Apr 13 #PHP
php使用curl和正则表达式抓取网页数据示例
Apr 13 #PHP
PHP header()函数常用方法总结
Apr 11 #PHP
You might like
改造一台复古桌面收音机
2021/03/02 无线电
PHP has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
php自动加载方式集合
2016/04/04 PHP
php ActiveMQ的安装与使用方法图文教程
2020/02/23 PHP
7个Javascript地图脚本整理
2009/10/20 Javascript
js删除所有的cookie的代码
2010/11/25 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JavaScript获取页面中第一个锚定文本的方法
2015/04/03 Javascript
AngularJS向后端ASP.NET API控制器上传文件
2016/02/03 Javascript
从零学习node.js之express入门(六)
2017/02/25 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
JavaScript闭包的简单应用
2017/09/01 Javascript
js使用xml数据载体实现城市省份二级联动效果
2017/11/08 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
如何在postman中添加cookie信息步骤解析
2020/06/30 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
使用element-ui +Vue 解决 table 里包含表单验证的问题
2020/07/17 Javascript
[01:07]2015国际邀请赛 中国区预选赛精彩回顾
2015/06/15 DOTA
python实现unicode转中文及转换默认编码的方法
2017/04/29 Python
Python获取当前公网ip并自动断开宽带连接实例代码
2018/01/12 Python
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
python简单鼠标自动点击某区域的实例
2019/06/25 Python
python中删除某个元素的方法解析
2019/11/05 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
Python关键字及可变参数*args,**kw原理解析
2020/04/04 Python
CSS3实现闪烁动画效果的方法
2015/02/09 HTML / CSS
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
澳大利亚珍珠首饰购物网站:Vayo Pearls
2019/03/11 全球购物
澳大利亚设计的优质鞋类和适合澳大利亚生活方式的服装:Rivers
2019/04/23 全球购物
英国时尚和家居用品零售商:Matalan
2021/02/28 全球购物
四风问题党员个人整改措施
2014/10/27 职场文书
员工试用期转正自我评价
2015/03/10 职场文书
2015年实习单位评语
2015/03/25 职场文书
mysqldump进行数据备份详解
2022/07/15 MySQL