如何使用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 相关文章推荐
使用Limit参数优化MySQL查询的方法
Nov 12 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
解析Win7 XAMPP apache无法启动的问题
Jun 26 PHP
CodeIgniter基本配置详细介绍
Nov 12 PHP
destoon首页调用求购供应信息的地区名称的方法
Aug 21 PHP
Yii2中如何使用modal弹窗(基本使用)
May 30 PHP
详解Yii2 定制表单输入字段的标签和样式
Jan 04 PHP
PHP编程文件处理类SplFileObject和SplFileInfo用法实例分析
Jul 22 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
详解PHP实现支付宝小程序用户授权的工具类
Dec 25 PHP
Thinkphp5.0 框架的请求方式与响应方式分析
Oct 14 PHP
实例讲解PHP表单
Jun 10 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
PHP下利用header()函数设置浏览器缓存的代码
2010/09/01 PHP
比较discuz和ecshop的截取字符串函数php版
2012/09/03 PHP
PHP实现把数字ID转字母ID
2013/08/12 PHP
Apache服务器下防止图片盗链的办法
2015/07/06 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
javascript学习笔记(二)数组和对象部分
2014/09/30 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
NodeJS链接MySql数据库的操作方法
2017/06/27 NodeJs
js模块加载方式浅析
2017/08/12 Javascript
Angularjs单选框相关的示例代码
2017/08/17 Javascript
原生JS实现瀑布流插件
2018/02/06 Javascript
JS实现盒子跟着鼠标移动及键盘方向键控制盒子移动效果示例
2019/01/29 Javascript
JavaScript中工厂函数与构造函数示例详解
2019/05/06 Javascript
浅谈一种让小程序支持JSX语法的新思路
2019/06/16 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
jQuery实现简单评论区功能
2020/10/26 jQuery
[08:47]2018国际邀请赛 OG战队举杯时刻
2018/08/29 DOTA
python修改注册表终止360进程实例
2014/10/13 Python
Python中unittest模块做UT(单元测试)使用实例
2015/06/12 Python
Django中使用第三方登录的示例代码
2018/08/20 Python
浅谈django的render函数的参数问题
2018/10/16 Python
opencv python统计及绘制直方图的方法
2019/01/21 Python
Python可视化mhd格式和raw格式的医学图像并保存的方法
2019/01/24 Python
Python Image模块基本图像处理操作小结
2019/04/13 Python
python读写Excel表格的实例代码(简单实用)
2019/12/19 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
C++和python实现阿姆斯特朗数字查找实例代码
2020/12/07 Python
HTML5 新事件 小结
2009/07/16 HTML / CSS
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
大学生演讲稿范文
2014/01/11 职场文书
幼儿园门卫制度
2014/01/29 职场文书
环保倡议书50字
2014/05/15 职场文书
公开承诺书格式
2014/05/21 职场文书
创业的9条正确思考方式
2019/08/26 职场文书
Java实现字符串转为驼峰格式的方法详解
2022/07/07 Java/Android