如何使用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控制网页过期时间的代码
Sep 28 PHP
一步一步学习PHP(4) php 函数 补充2
Feb 15 PHP
php下mysql数据库操作类(改自discuz)
Jul 03 PHP
Zend studio文件注释模板设置方法
Sep 29 PHP
php开启openssl的方法
May 15 PHP
destoon实现商铺管理主页设置增加新菜单的方法
Jun 26 PHP
getimagesize获取图片尺寸实例
Nov 15 PHP
php实现parent调用父类的构造方法与被覆写的方法
Feb 11 PHP
PHP中基本HTTP认证技巧分析
Mar 16 PHP
[原创]PHP正则删除html代码中a标签并保留标签内容的方法
May 23 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
Oct 22 PHP
php 多进程编程父进程的阻塞与非阻塞实例分析
Feb 22 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中使用与Perl兼容的正则表达式
2006/11/26 PHP
php读取csv实现csv文件下载功能
2013/12/18 PHP
ThinkPHP实现动态包含文件的方法
2014/11/29 PHP
我整理的PHP 7.0主要新特性
2016/01/07 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
php中Redis的应用--消息传递
2017/03/28 PHP
Laravel Eloquent ORM 多条件查询的例子
2019/10/10 PHP
经常用的图片在容器中的水平垂直居中实例
2007/06/10 Javascript
Prototype中dom对象方法汇总
2008/09/17 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
java与javascript之间json格式数据互转介绍
2013/10/29 Javascript
file控件选择上传文件确定后触发的js事件是哪个
2014/03/17 Javascript
jQuery基于图层模仿五星星评价功能的方法
2015/05/07 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
canvas实现绘制吃豆鱼效果
2017/01/12 Javascript
NodeJS 实现手机短信验证模块阿里大于功能
2017/06/19 NodeJs
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
Vue的H5页面唤起支付宝支付功能
2019/04/18 Javascript
elementUi vue el-radio 监听选中变化的实例代码
2019/06/28 Javascript
vue实现评论列表功能
2019/10/25 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
浅析JavaScript 函数防抖和节流
2020/07/13 Javascript
vue iview 隐藏Table组件里的某一列操作
2020/11/13 Javascript
[37:03]完美世界DOTA2联赛PWL S3 INK ICE vs GXR 第二场 12.16
2020/12/18 DOTA
python操作sqlite的CRUD实例分析
2015/05/08 Python
学习Python3 Dlib19.7进行人脸面部识别
2018/01/24 Python
python读取和保存图片5种方法对比
2018/09/12 Python
Django实现学员管理系统
2019/02/26 Python
css3中的calc函数浅析
2018/07/10 HTML / CSS
Kingsoft金山公司C/C++笔试题
2016/05/10 面试题
北大自主招生自荐信
2013/10/19 职场文书
构建高效课堂实施方案
2014/03/13 职场文书
2015新年联欢晚会开场白
2014/12/14 职场文书
钢琴师观后感
2015/06/12 职场文书
整理Python中常用的conda命令操作
2021/06/15 Python