免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1514 | 回复: 1
打印 上一主题 下一主题

批量清除BOM头 [复制链接]

论坛徽章:
1
程序设计版块每日发帖之星
日期:2015-07-10 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2015-07-09 10:53 |只看该作者 |倒序浏览
有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题。以下是批量清除bom头的代码
[代码][PHP]代码
  1. <?php  
  2. //有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题。以下是批量清除bom头的代码

  3. if (isset ( $_GET ['dir'] )) { //config the basedir   
  4.     $basedir = $_GET ['dir'];   
  5. } else {   
  6.     $basedir = '.';   
  7. }   
  8. $basedir="./weibo/";
  9. $auto = 1;   

  10. checkdir ( $basedir );   

  11. function checkdir($basedir) {   
  12.     if ($dh = opendir ( $basedir )) {   
  13.         while ( ($file = readdir ( $dh )) !== false ) {   
  14.             if ($file != '.' && $file != '..') {   
  15.                 if (! is_dir ( $basedir . "/" . $file )) { // 如果是文件   
  16.                     echo "filename: $basedir/$file " . checkBOM ( "$basedir/$file" ) . " <br>";   
  17.                 } else {   
  18.                     $dirname = $basedir . "/" .$file; // 如果是目录   
  19.                     checkdir ( $dirname ); // 递归   
  20.                 }   
  21.             }   
  22.         }   
  23.         closedir ( $dh );   
  24.     }   
  25. }   

  26. function checkBOM($filename) {   
  27.     global $auto;   
  28.     $contents = file_get_contents ( $filename );   
  29.     $charset [1] = substr ( $contents, 0, 1 );   
  30.     $charset [2] = substr ( $contents, 1, 1 );   
  31.     $charset [3] = substr ( $contents, 2, 1 );   
  32.     if (ord ( $charset [1] ) == 239 && ord ( $charset [2] ) == 187 && ord ( $charset [3] ) == 191) { // BOM 的前三个字符的ASCII 码分别为 239 187 191   
  33.         if ($auto == 1) {   
  34.             $rest = substr ( $contents, 3 );   
  35.             rewrite ( $filename, $rest );   
  36.             return ("<font color=red>BOM found, automatically removed.</font>");   
  37.         } else {   
  38.             return ("<font color=red>BOM found.</font>");   
  39.         }   
  40.     } else   
  41.         return ("BOM Not Found.");   
  42. }   

  43. function rewrite($filename, $data) {   
  44.     $filenum = fopen ( $filename, "w" );   
  45.     flock ( $filenum, LOCK_EX );   
  46.     fwrite ( $filenum, $data );   
  47.     fclose ( $filenum );   
  48. }
复制代码

论坛徽章:
59
2015七夕节徽章
日期:2015-08-24 11:17:25ChinaUnix专家徽章
日期:2015-07-20 09:19:30每周论坛发贴之星
日期:2015-07-20 09:19:42ChinaUnix元老
日期:2015-07-20 11:04:38荣誉版主
日期:2015-07-20 11:05:19巳蛇
日期:2015-07-20 11:05:26CU十二周年纪念徽章
日期:2015-07-20 11:05:27IT运维版块每日发帖之星
日期:2015-07-20 11:05:34操作系统版块每日发帖之星
日期:2015-07-20 11:05:36程序设计版块每日发帖之星
日期:2015-07-20 11:05:40数据库技术版块每日发帖之星
日期:2015-07-20 11:05:432015年辞旧岁徽章
日期:2015-07-20 11:05:44
2 [报告]
发表于 2015-07-10 09:55 |只看该作者
BOM头一般是存UTF8时添加的头信息。在存储时选择不存储BOM也一样啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP