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 相关文章推荐
同时提取多条新闻中的文本一例
Oct 09 PHP
PHP5与MySQL数据库操作常用代码 收集
Mar 21 PHP
完美解决令人抓狂的zend studio 7代码提示(content Assist)速度慢的问题
Jun 20 PHP
php+jQuery.uploadify实现文件上传教程
Dec 26 PHP
9个实用的PHP代码片段分享
Jan 22 PHP
php mysql procedure实现获取多个结果集的方法【基于thinkPHP】
Nov 09 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
解决安装WampServer时提示缺少msvcr110.dll文件的问题
Jul 09 PHP
简单实现php上传文件功能
Sep 21 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
Mar 02 PHP
PHP给源代码加密的几种方法汇总(推荐)
Feb 06 PHP
Windows平台PHP+IECapt实现网页批量截图并创建缩略图功能详解
Aug 02 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
Email+URL的判断和自动转换函数
2006/10/09 PHP
php过滤危险html代码
2008/08/18 PHP
php 文件上传系统手记
2009/10/26 PHP
如何让thinkphp在模型中自动完成session赋值小教程
2014/09/05 PHP
PHP实现指定字段的多维数组排序函数分享
2015/03/09 PHP
PHP中将一个字符串部分字符用星号*替代隐藏的实现代码
2019/09/08 PHP
defer属性导致引用JQuery的页面报“浏览器无法打开网站xxx,操作被中止”错误的解决方法
2010/04/27 Javascript
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
JavaScript实现网页对象拖放功能的方法
2015/04/15 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
2015/12/18 Javascript
关于原生js中bind函数的简单实现
2016/08/10 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
Angularjs 实现动态添加控件功能
2017/05/25 Javascript
微信小程序实现复选框效果
2018/12/28 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
JavaScript语法约定和程序调试原理解析
2020/11/03 Javascript
[02:41]2015国际邀请赛中国区预选赛观战指南
2015/05/20 DOTA
Python Socket传输文件示例
2017/01/16 Python
python开发简易版在线音乐播放器
2017/03/03 Python
VSCode下配置python调试运行环境的方法
2018/04/06 Python
使用Python读取二进制文件的实例讲解
2018/07/09 Python
Python实现去除图片中指定颜色的像素功能示例
2019/04/13 Python
python urllib爬虫模块使用解析
2019/09/05 Python
python简单的三元一次方程求解实例
2020/04/02 Python
用python计算文件的MD5值
2020/12/23 Python
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
在线课程:Skillshare
2019/04/02 全球购物
EJB3推出JPA的原因
2013/10/16 面试题
《登鹳雀楼》教学反思
2014/04/09 职场文书
2014年班主任自我评价范文
2014/04/23 职场文书
2014年远程教育工作总结
2014/12/09 职场文书
答辩状格式范本
2015/05/22 职场文书
javascript实现计算器功能详解流程
2021/11/01 Javascript
Python的property属性详细讲解
2022/04/11 Python
JS setTimeout与setInterval的区别
2022/04/20 Javascript