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中利用XML技术构造远程服务(上)
Oct 09 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
php内核解析:PHP中的哈希表
Jan 30 PHP
php格式输出文件var_export函数实例
Nov 15 PHP
php查询ip所在地的方法
Dec 05 PHP
laravel安装zend opcache加速器教程
Mar 02 PHP
php将日期格式转换成xx天前的格式
Apr 16 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
Apr 12 PHP
Yii配置与使用memcached缓存的方法
Jul 13 PHP
PHP弱类型的安全问题详细总结
Sep 25 PHP
thinkPHP微信分享接口JSSDK用法实例
Jul 07 PHP
php解析非标准json、非规范json的方式实例
Dec 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
Linux下进行MYSQL编程时插入中文乱码的解决方案
2007/03/15 PHP
php XMLWriter类的简单示例代码(RSS输出)
2011/09/30 PHP
smarty模板中使用get、post、request、cookies、session变量的方法
2014/04/24 PHP
PHP进阶学习之类的自动加载机制原理分析
2019/06/18 PHP
Laravel6.0.4中将添加计划任务事件的方法步骤
2019/10/15 PHP
《JavaScript高级程序设计》阅读笔记(二) ECMAScript中的原始类型
2012/02/27 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
js获取url中的参数且参数为中文时通过js解码
2014/03/19 Javascript
js 触发select onchange事件代码
2014/03/20 Javascript
jQuery实现平滑滚动到指定锚点的方法
2015/03/20 Javascript
果断收藏9个Javascript代码高亮脚本
2016/01/06 Javascript
javascript基本算法汇总
2016/03/09 Javascript
js滑动提示效果代码分享
2016/03/10 Javascript
AngularJS基础 ng-mouseenter 指令示例代码
2016/08/02 Javascript
VUEJS 2.0 子组件访问/调用父组件的实例
2018/02/10 Javascript
vue+element+Java实现批量删除功能
2019/04/08 Javascript
微信小程序webview组件交互,内联h5页面并网页实现微信支付实现解析
2019/08/16 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
Python3+selenium配置常见报错解决方案
2020/08/28 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
英国最受欢迎的母婴精品品牌:JoJo Maman BéBé
2021/02/17 全球购物
中专三年学习的个人自我评价
2013/12/12 职场文书
电子信息专业自荐书
2014/02/04 职场文书
入学生会自荐书范文
2014/02/05 职场文书
小学生暑假家长评语
2014/04/17 职场文书
大专生找工作自荐书
2014/06/10 职场文书
员工安全生产责任书
2014/07/22 职场文书
高中国旗下的演讲稿
2014/08/28 职场文书
农行心得体会
2014/09/02 职场文书
运动会广播稿50字-100字
2014/10/11 职场文书
责任书格式
2019/04/18 职场文书