PHP实现UTF-8文件BOM自动检测与移除实例


Posted in PHP onNovember 05, 2014

本文实例讲述了PHP实现UTF-8文件BOM自动检测与移除的方法。分享给大家供大家参考。具体实现方法如下:

BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件。但PHP在读取文件时会把这些字符读出,从而形成了文件 开头含有一些无法识别的字符的问题。

比如用UTF-8格式保存的生成图片的PHP文件,因为文件头隐藏的BOM信息也被下发,导致生成的 图片数据不对,浏览器无法识别。

要检测一个UTF-8文件是否含有BOM信息,就是检测文件开头的字三个符,是否为0xEF, 0xBB, 0xBF。下面这个小程序,用户遍历某个目录下所有文件,并检测是否加了BOM。

<?php

//此文件用于快速测试UTF8编码的文件是不是加了BOM,并可自动移除

//By Bob Shen
$basedir="."; //修改此行为需要检测的目录,点表示当前目录

$auto=1; //是否自动移除发现的BOM信息。1为是,0为否。
//以 下不用改动
if ($dh = opendir($basedir)) {

while (($file = readdir($dh)) !== false) {

if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")." <br>";

}

closedir($dh);

}
function checkBOM ($filename) {

global $auto;

$contents=file_get_contents($filename);

$charset[1]=substr($contents, 0, 1); 

$charset[2]=substr($contents, 1, 1); 

$charset[3]=substr($contents, 2, 1); 

if (ord($charset[1])==239 && ord($charset[2])==187 && ord($charset[3])==191) {

if ($auto==1) {

$rest=substr($contents, 3);

rewrite ($filename, $rest);

return ("<font color=red>BOM found, automatically removed.</font>");

} else {

return ("<font color=red>BOM found.</font>");

}

} 

else return ("BOM Not Found.");

}
function rewrite ($filename, $data) {

$filenum=fopen($filename,"w");

flock($filenum,LOCK_EX);

fwrite($filenum,$data);

fclose($filenum);

}

将以上代码另存为del_bom.php,修改需要检测的目录后运行。这样可能有助于检测是哪个文件带有了BOM信息导致所有页面开头都有 那么一段空白。

把下面 代码保存为 bom.php  记得保存为 utf8 格式

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

<h3><?echo $_POST["dir"];?>目录下的检测结果</h3>

<?php

//此文件用于快速测试UTF8编码的文件是 不是加了BOM,并可自动移除

//By bob 老大

//风吟修改

$目录= str_replace(" ", "|", $_POST["dir"]);//接受提交的路径数据

$basedir="$目录"; //修改此行为需要检测的目录,点表示当前目录

$auto=1; //是否自动移除发现的BOM信息。1为是,0为否。

//以下不用改动

if ($dh = opendir($basedir)) {

while (($file = readdir($dh)) !== false) {

if ($file!='.' && $file!='..' && !is_dir($basedir."/".$file)) echo "filename: $file ".checkBOM("$basedir/$file")." <br>";

}

closedir($dh);

}

function checkBOM ($filename) {

global $auto;

$contents=file_get_contents($filename);

$charset[1]=substr($contents, 0, 1); 

$charset[2]=substr($contents, 1, 1); 

$charset[3]=substr($contents, 2, 1); 

if (ord($charset[1])==239 && ord($charset[2])==187 && ord($charset[3])==191) {

if ($auto==1) {

$rest=substr($contents, 3);

rewrite ($filename, $rest);

return ("<font color=red>--Bom 已经清除完毕。</font>");

} else {

return ("<font color=red>--Bom found.</font>");

}

} 

else return ("--没有检查到Bom.");

}

function rewrite ($filename, $data) {

$filenum=fopen($filename,"w");

flock($filenum,LOCK_EX);

fwrite($filenum,$data);

fclose($filenum);

}

?>
<form action="" method="POST">

目录: <input type="text" name="dir" />

<input type="submit" value="检测目录" >

</form>

请 输入文件夹名比如 plugin/fanfou 后面不需要加/。如果要检测根目录输入“ . ”  . 是小数点 提交既可

</br>

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
获得Google PR值的PHP代码
Jan 28 PHP
php完全过滤HTML,JS,CSS等标签
Jan 16 PHP
了解Joomla 这款来自国外的php网站管理系统
Mar 11 PHP
PHP OPP机制和模式简介(抽象类、接口和契约式编程)
Jun 09 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
Sep 10 PHP
Javascript与PHP验证用户输入URL地址是否正确
Oct 09 PHP
[原创]php逐行读取txt文件写入数组的方法
Jul 02 PHP
PHP编写文件多服务器同步程序
Jul 02 PHP
php 判断字符串编码是utf-8 或gb2312实例
Nov 01 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
Feb 09 PHP
PHP实现上传图片到数据库并显示输出的方法
May 31 PHP
Laravel框架下载,安装及路由操作图文详解
Dec 04 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 #PHP
php画图实例
Nov 05 #PHP
PHP队列用法实例
Nov 05 #PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 #PHP
CI框架验证码CAPTCHA辅助函数用法实例
Nov 05 #PHP
PHP操作MySQL事务实例
Nov 05 #PHP
PHP通过插入mysql数据来实现多机互锁实例
Nov 05 #PHP
You might like
关于PHP5 Session生命周期介绍
2010/03/02 PHP
实现WordPress主题侧边栏切换功能的PHP脚本详解
2015/12/14 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
利用NodeJS的子进程(child_process)调用系统命令的方法分享
2013/06/05 NodeJs
jquery1.10给新增元素绑定事件的方法
2014/03/06 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
JavaScript forEach()遍历函数使用及介绍
2015/07/08 Javascript
跟我学习javascript的prototype使用注意事项
2015/11/17 Javascript
javascript中错误使用var造成undefined
2016/03/31 Javascript
jQuery中ScrollTo用法示例
2016/09/04 Javascript
JS填写银行卡号每隔4位数字加一个空格
2016/12/19 Javascript
移动端界面的适配
2017/01/11 Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
2017/01/23 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
js使用文件流下载csv文件的实现方法
2019/07/15 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
Layui表格行工具事件与数据回填方法
2019/09/13 Javascript
详解Vue 单文件组件的三种写法
2020/02/19 Javascript
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
Python3 webservice接口测试代码详解
2020/06/23 Python
UGG美国官网:购买UGG雪地靴、拖鞋和鞋子
2017/12/31 全球购物
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
土耳其玩具商店:Toyzz Shop
2019/08/02 全球购物
娇韵诗俄罗斯官方网站:Clarins俄罗斯
2020/10/03 全球购物
护理职业应聘自荐书
2013/09/29 职场文书
自我评价优秀范文分享
2013/11/30 职场文书
区三好学生主要事迹
2014/01/30 职场文书
机械制造专业大学生自我鉴定
2014/09/19 职场文书
终止劳动合同协议书
2014/10/05 职场文书
房屋分割离婚协议书范本
2014/12/01 职场文书
社区服务活动报告
2015/02/05 职场文书
matlab xlabel位置的设置方式
2021/05/21 Python
Python面向对象之成员相关知识总结
2021/06/24 Python