如何使用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 相关文章推荐
用PHP4访问Oracle815
Oct 09 PHP
php中理解print EOT分界符和echo EOT的用法区别小结
Feb 21 PHP
PHP下对数组进行排序的函数
Aug 08 PHP
PHP中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
Mar 23 PHP
PHP判断搜索引擎蜘蛛并自动记忆到文件的代码
Feb 04 PHP
php生成静态页面的简单示例
Apr 17 PHP
php如何实现只替换一次或N次
Oct 29 PHP
php结合md5的加密解密算法实例
Sep 30 PHP
php字符集转换
Jan 23 PHP
php 处理png图片白色背景色改为透明色的实例代码
Dec 10 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 PHP
php设计模式之模板模式实例分析【星际争霸游戏案例】
Mar 24 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 自定义错误处理函数trigger_error()
2013/03/26 PHP
神盾加密解密教程(三)PHP 神盾解密工具
2014/06/08 PHP
PHP中让curl支持sock5的代码实例
2015/01/21 PHP
使用XHProf查找PHP性能瓶颈的实例
2017/12/13 PHP
Django 标签筛选的实现代码(一对多、多对多)
2018/09/05 PHP
laravel 输出最后执行sql 附:whereIn的使用方法
2019/10/10 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
JavaScript setTimeout和setInterval的使用方法 说明
2010/03/25 Javascript
JavaScript检测字符串中是否含有html标签实现方法
2015/07/01 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
用jquery快速解决IE输入框不能输入的问题
2016/10/04 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
用node和express连接mysql实现登录注册的实现代码
2017/07/05 Javascript
浅谈Express异步进化史
2017/09/09 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
微信小程序实现添加手机联系人功能示例
2017/11/30 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
支付宝小程序自定义弹窗dialog插件的实现代码
2018/11/30 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
python client使用http post 到server端的代码
2013/02/10 Python
python自动翻译实现方法
2016/05/28 Python
python3 拼接字符串的7种方法
2018/09/12 Python
Python DataFrame.groupby()聚合函数,分组级运算
2018/09/18 Python
Django rstful登陆认证并检查session是否过期代码实例
2019/08/13 Python
Pyinstaller加密打包应用的示例代码
2020/06/11 Python
python导入库的具体方法
2020/06/18 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
新百伦折扣店:Joe’s New Balance Outlet
2016/08/20 全球购物
中国网上药店领导者:1药网
2017/02/16 全球购物
世界上最大的在线汽车租赁预订平台:Rentalcars.com(支持中文)
2018/10/12 全球购物
简历中个人求职的自我评价模板
2013/11/29 职场文书
公司员工离职证明书
2014/10/04 职场文书
综合素质评价个性发展自我评价
2015/03/06 职场文书
2015年业务员工作总结范文
2015/04/07 职场文书
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS
SONY AN-LP1 短波有源天线放大器图
2022/04/05 无线电