PHP版UTF-8文件BOM自动检测移除程序

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

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

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

 

ExpandedBlockStart.gif 代码
// 此文件用于快速测试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 " ) . "
" ;
}
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  ( " <span style= " FONT - FAMILY :  ; COLOR :  red " >BOM found, automatically removed.</span> " );
else  {
return  ( " <span style= " FONT - FAMILY :  ; COLOR :  red " >BOM found.</span> " );
}
}
else   return  ( " BOM Not Found. " );
}

function  rewrite ( $filename ,   $data ) {
$filenum = fopen ( $filename , " w " );
flock ( $filenum , LOCK_EX);
fwrite ( $filenum , $data );
fclose ( $filenum );
}

 

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值