如何使用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自动更新新闻DIY
Oct 09 PHP
php基础知识:类与对象(2) 自动加载对象
Dec 13 PHP
PHP提取中文首字母
Apr 09 PHP
php 防止单引号,双引号在接受页面转义
Jul 10 PHP
解析php session_set_save_handler 函数的用法(mysql)
Jun 29 PHP
joomla数据库操作示例代码
Jan 06 PHP
CodeIgniter表单验证方法实例详解
Mar 03 PHP
Yii2 rbac权限控制之菜单menu实例教程
Apr 28 PHP
PHP实现的常规正则验证helper公共类完整实例
Apr 27 PHP
PHP实现查询手机归属地的方法详解
Apr 28 PHP
自制PHP框架之路由与控制器
May 07 PHP
laravel利用中间件做防非法登录和权限控制示例
Oct 21 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 json_encode值中大括号与花括号区别
2013/09/30 PHP
PHP APC缓存配置、使用详解
2014/03/06 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
PHP类的反射用法实例
2014/11/03 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
PHP面向对象五大原则之依赖倒置原则(DIP)详解
2018/04/08 PHP
jquery插件validate验证的小例子
2013/05/08 Javascript
JavaScript前端图片加载管理器imagepool使用详解
2014/12/29 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
jQuery中判断对象是否存在的方法汇总
2016/02/24 Javascript
JavaScript正则表达式匹配 div  style标签
2016/03/15 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
微信小程序 二维码canvas绘制实例详解
2017/01/06 Javascript
jacascript DOM节点——元素节点、属性节点、文本节点
2017/04/18 Javascript
CentOS 安装NodeJS V8.0.0的方法
2017/06/15 NodeJs
Angular实现模版驱动表单的自定义校验功能(密码确认为例)
2018/05/17 Javascript
vuejs前后端数据交互之从后端请求数据的实例
2018/08/11 Javascript
js实现延迟加载的几种方法详解
2019/01/19 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
从零学Python之入门(四)运算
2014/05/27 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
Python命名空间的本质和加载顺序
2018/12/17 Python
python实现的config文件读写功能示例
2019/09/24 Python
python爬取本站电子书信息并入库的实现代码
2020/01/20 Python
详解python命令提示符窗口下如何运行python脚本
2020/09/11 Python
python实现图像随机裁剪的示例代码
2020/12/10 Python
python基于Kivy写一个图形桌面时钟程序
2021/01/28 Python
德国珠宝和配件商店:Styleserver
2021/02/23 全球购物
火箭队口号
2014/06/18 职场文书
领导干部作风建设总结
2014/10/23 职场文书
喋血孤城观后感
2015/06/08 职场文书
外出听课学习心得体会
2016/01/15 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
CSS3实现的水平标题菜单
2021/04/14 HTML / CSS
Nginx实现高可用集群构建(Keepalived+Haproxy+Nginx)
2021/05/27 Servers