如何使用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 相关文章推荐
一个域名查询的程序
Oct 09 PHP
PHP防注入安全代码
Apr 09 PHP
Zend Guard一些常见问题解答
Sep 11 PHP
ueditor 1.2.6 使用方法说明
Jul 24 PHP
PHP strstr 函数判断字符串是否否存在的实例代码
Sep 28 PHP
php中Socket创建与监听实现方法
Jan 05 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
Mar 19 PHP
php实现递归抓取网页类实例
Apr 03 PHP
Apache启动报错No space left on device: AH00023该怎么解决
Oct 16 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
php利用header函数下载各种文件
Aug 24 PHP
详解php几行代码实现CSV格式文件输出
Jul 01 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 程序员的调试技术小结
2009/11/15 PHP
php记录日志的实现代码
2011/08/08 PHP
CI配置多数据库访问的方法
2016/03/28 PHP
smarty自定义函数用法示例
2016/05/20 PHP
Laravel搭建后台登录系统步骤详解
2016/07/26 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
PHP新特性详解之命名空间、性状与生成器
2017/07/18 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
setTimeout和setInterval的浏览器兼容性分析
2007/02/27 Javascript
仿百度的关键词匹配搜索示例
2013/09/25 Javascript
javaScript中的this示例学习详解及工作原理
2014/01/13 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
5个最顶级jQuery图表类库插件【jquery插件库】
2016/05/05 Javascript
JS使用eval()动态创建变量的方法
2016/06/03 Javascript
使用JS实现图片展示瀑布流效果(简单实例)
2016/09/06 Javascript
ionic2屏幕适配实现适配手机、平板等设备的示例代码
2017/08/11 Javascript
基于Vue+element-ui 的Table二次封装的实现
2018/07/20 Javascript
vue中tab选项卡的实现思路
2018/11/25 Javascript
使用localStorage替代cookie做本地存储
2019/09/25 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
Vue 一键清空表单的实现方法
2020/02/07 Javascript
[45:59]EG vs OG 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
Python随机生成数模块random使用实例
2015/04/13 Python
python中int与str互转方法
2018/07/02 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
Windows 下python3.8环境安装教程图文详解
2020/03/11 Python
Python json读写方式和字典相互转化
2020/04/18 Python
Python新手学习raise用法
2020/06/03 Python
利用CSS3的transition属性实现滑动效果
2015/08/05 HTML / CSS
您附近的水疗和健康场所:Spafinder(美国)
2019/07/05 全球购物
创意活动策划书
2014/01/15 职场文书
委托书格式
2014/08/01 职场文书
档案工作汇报材料
2014/08/21 职场文书
python装饰器代码解析
2022/03/23 Python