如何使用PHP批量去除文件UTF8 BOM信息


Posted in PHP onAugust 05, 2013

原理:
UTF8文件,微软为了增加一个识别信息,有了BOM这个东西:BOM —— Byte Order Mark,缺省在Windows等平台上编辑的UTF8文件会在头部增加3个字节的标记信息,我们PHP引擎在处理的时候会完整读取整个PHP代码文档, 如果PHP文件头部包含BOM信息,就会输出一个空白,在很多时候会带来问题,比如我们session无法工作、cookie无法设置等等问题。

解决方法:
把头部BOM的3个字节信息识别出来,然后剔除掉。不过一般情况我们不知道哪个文件有BOM,或者是有很多文件,这个时候,就需要进行批量处理了,下面代码主要就是展现了批量处理的情况,应该会对大家工作中有帮助。

执行方法:
设置一个路径,然后直接执行就行。

<?php 
// 设定你要清除BOM的根目录(会自动扫描所有子目录和文件)
$HOME = dirname(__FILE__);
// 如果是Windows系统,修改为:$WIN = 1;
$WIN = 0;
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>UTF8 BOM 清除器</title>
<style>
body { font-size: 10px; font-family: Arial, Helvetica, sans-serif; background: #FFF; color: #000; }
.FOUND { color: #F30; font-size: 14px; font-weight: bold; }
</style>
</head>
<body>
<?php
$BOMBED = array();
RecursiveFolder($HOME);
echo '<h2>These files had UTF8 BOM, but i cleaned them:</h2><p class="FOUND">';
foreach ($BOMBED as $utf) { echo $utf ."<br />\n"; }
echo '</p>';
// 递归扫描
function RecursiveFolder($sHOME) {
 global $BOMBED, $WIN;
 $win32 = ($WIN == 1) ? "\\" : "/";
 $folder = dir($sHOME);
 $foundfolders = array();
 while ($file = $folder->read()) {
  if($file != "." and $file != "..") {
   if(filetype($sHOME . $win32 . $file) == "dir"){
    $foundfolders[count($foundfolders)] = $sHOME . $win32 . $file;
   } else {
    $content = file_get_contents($sHOME . $win32 . $file);
    $BOM = SearchBOM($content);
    if ($BOM) {
     $BOMBED[count($BOMBED)] = $sHOME . $win32 . $file;
     // 移出BOM信息
     $content = substr($content,3);
     // 写回到原始文件
     file_put_contents($sHOME . $win32 . $file, $content);
    }
   }
  }
 }
 $folder->close();
 if(count($foundfolders) > 0) {
  foreach ($foundfolders as $folder) {
   RecursiveFolder($folder, $win32);
  }
 }
}
// 搜索当前文件是否有BOM
function SearchBOM($string) { 
  if(substr($string,0,3) == pack("CCC",0xef,0xbb,0xbf)) return true;
  return false; 
}
?>
</body>
</html>
PHP 相关文章推荐
PHP strncasecmp字符串比较的小技巧
Jan 04 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
php中session与cookie的比较
Jan 27 PHP
php生成高清缩略图实例详解
Dec 07 PHP
php实现统计目录文件大小的函数
Dec 25 PHP
PHP快速生成各种信息提示框的方法
Feb 03 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
php使用QueryList轻松采集js动态渲染页面方法
Sep 11 PHP
PHP结合Ffmpeg快速搭建流媒体服务的实践记录
Oct 31 PHP
Laravel Eloquent分表方法并使用模型关联的实现
Nov 25 PHP
Apache+PHP+MySQL搭建PHP开发环境图文教程
Aug 06 PHP
php中array_fill函数的实例用法
Mar 02 PHP
深入解析PHP中逗号与点号的区别
Aug 05 #PHP
php 读取文件头判断文件类型的实现代码
Aug 05 #PHP
PHP取二进制文件头快速判断文件类型的实现代码
Aug 05 #PHP
深入解析PHP 5.3.x 的strtotime() 时区设定 警告信息修复
Aug 05 #PHP
浅析Mysql 数据回滚错误的解决方法
Aug 05 #PHP
解析php mysql 事务处理回滚操作(附实例)
Aug 05 #PHP
php多层数组与对象的转换实例代码
Aug 05 #PHP
You might like
MySql 按时间段查询数据方法(实例说明)
2008/11/02 PHP
php实现mysql数据库分表分段备份
2015/06/18 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
各浏览器对document.getElementById等方法的实现差异解析
2013/12/05 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
Sea.JS知识总结
2016/05/05 Javascript
JS使用单链表统计英语单词出现次数
2016/06/16 Javascript
AngularJS过滤器详解及示例代码
2016/08/16 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
JavaScript运行原理分析
2018/02/09 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
2018/04/17 Javascript
JS实现的类似微信聊天效果示例
2019/01/29 Javascript
js事件触发操作实例分析
2019/06/21 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
[26:40]DOTA2上海特级锦标赛A组资格赛#1 Secret VS MVP.Phx第一局
2016/02/25 DOTA
[06:44]2018DOTA2亚洲邀请赛4.5 SOLO赛 MidOne vs Sumail
2018/04/06 DOTA
在python中以相同顺序shuffle两个list的方法
2018/12/13 Python
Python中的集合介绍
2019/01/28 Python
用python wxpy管理微信公众号并利用微信获取自己的开源数据
2019/07/30 Python
python实现交并比IOU教程
2020/04/16 Python
Python检测端口IP字符串是否合法
2020/06/05 Python
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
美国领先的家庭智能音响系统品牌:Sonos
2018/07/20 全球购物
SmartBuyGlasses比利时:购买品牌太阳镜和眼镜
2019/08/09 全球购物
js实现弹框效果
2021/03/24 Javascript
资深生产主管自我评价
2013/09/22 职场文书
前台接待员岗位职责
2014/01/02 职场文书
班主任个人工作反思
2014/04/28 职场文书
中央空调节能方案
2014/06/15 职场文书
亲子阅读的活动方案
2014/08/15 职场文书
2014年乡镇人大工作总结
2014/11/25 职场文书
领导工作表现评语
2015/01/04 职场文书
政审证明材料
2015/06/19 职场文书
python实现批量提取指定文件夹下同类型文件
2021/04/05 Python
vue 自定义组件添加原生事件
2022/04/21 Vue.js