批量清除BOM头

简介: 批量清除BOM头  (2012-03-05 13:28:30) 转载▼ 标签:  杂谈   有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题。以下是批量清除bom头的代码,复制代码,保存成.php文件,放在想执行的文件夹,运行就可以了

批量清除BOM头

  (2012-03-05 13:28:30)
标签: 

杂谈

 
有些php文件由于不小心保存成了含bom头的格式而导致出现一系列的问题。以下是批量清除bom头的代码,复制代码,保存成.php文件,放在想执行的文件夹,运行就可以了
  1. <?php  
  2. if (isset ( $_GET ['dir'] )) { //config the basedir    
  3.   $basedir = $_GET ['dir'];    
  4. } else {    
  5.   $basedir = '.';    
  6. }    
  7.   
  8. $auto = 1;    
  9.   
  10. checkdir ( $basedir );    
  11.   
  12. function checkdir($basedir) {    
  13.   if ($dh = opendir ( $basedir )) {    
  14.     while ( ($file = readdir ( $dh )) !== false ) {    
  15.       if ($file != '.' && $file != '..') {    
  16.         if (! is_dir ( $basedir . "/" . $file )) { // 如果是文件    
  17.           echo "filename: $basedir/$file " . checkBOM ( "$basedir/$file" ) . " <br>";    
  18.         } else {    
  19.           $dirname = $basedir . "/" .$file; // 如果是目录    
  20.           checkdir ( $dirname ); // 递归    
  21.         }    
  22.       }    
  23.     }    
  24.     closedir ( $dh );    
  25.   }    
  26. }    
  27.   
  28. function checkBOM($filename) {    
  29.   global $auto;    
  30.   $contents = file_get_contents ( $filename );    
  31.   $charset [1] = substr ( $contents, 0, 1 );    
  32.   $charset [2] = substr ( $contents, 1, 1 );    
  33.   $charset [3] = substr ( $contents, 2, 1 );    
  34.   if (ord ( $charset [1] ) == 239 && ord ( $charset [2] ) == 187 && ord ( $charset [3] ) == 191) { // BOM 的前三个字符的ASCII 码分别为 239 187 191    
  35.     if ($auto == 1) {    
  36.       $rest = substr ( $contents, 3 );    
  37.       rewrite ( $filename, $rest );    
  38.       return ("<font color=red>BOM found, automatically removed.</font>");    
  39.     } else {    
  40.       return ("<font color=red>BOM found.</font>");    
  41.     }    
  42.   } else    
  43.     return ("BOM Not Found.");    
  44. }    
  45.   
  46. function rewrite($filename, $data) {    
  47.   $filenum = fopen ( $filename, "w" );    
  48.   flock ( $filenum, LOCK_EX );    
  49.   fwrite ( $filenum, $data );    
  50.   fclose ( $filenum );    
目录
相关文章
|
1月前
|
存储 编译器 C语言
如何在 C 语言中判断文件缓冲区是否需要刷新?
在C语言中,可以通过检查文件流的内部状态或使用`fflush`函数尝试刷新缓冲区来判断文件缓冲区是否需要刷新。通常,当缓冲区满、遇到换行符或显式调用`fflush`时,缓冲区会自动刷新。
|
6月前
|
JavaScript C#
C# bom头清理
C# bom头清理
54 0
|
消息中间件 架构师 数据处理
处理数据时点按钮,数据完数据时会自动执行的问题
处理数据时点按钮,数据完数据时会自动执行的问题
|
JavaScript 前端开发
如何阻止在 vue项目中快速双击俩次新增/编辑连续发送俩次请求
如何阻止在 vue项目中快速双击俩次新增/编辑连续发送俩次请求
89 0
element close事件关闭表单,数据替换掉原始列表的数据bug解决
element close事件关闭表单,数据替换掉原始列表的数据bug解决
77 0
|
JavaScript PHP
文件bom头,文件bom头保存的什么东西,php读取bom头数据
文件bom头,文件bom头保存的什么东西,php读取bom头数据
85 0
以流的方式对文件上传下载,并保存指定位置
以流的方式对文件上传下载,并保存指定位置
200 0
以流的方式对文件上传下载,并保存指定位置
|
缓存 前端开发
页面片段缓存(一)
  一般,页面上会分为很多部分,而不同的部分更新的频率是不一样的。如果对整个页面采用统一的缓存策略则不太合适,   而且很多系统的页面左上角都有一个该死的“Welcome XXX”。这种特定于用户的信息我们是不能缓存的。
785 0
|
缓存 索引
页面片段缓存(二)
  在上一篇文章中,我介绍了我们用土法炼钢的方法,使用Velocity提供的自定义标签实现片段缓存。这样的方式虽然也解决了我们的问题,但还是引出了一些bug。而且还有点hack的味道(虽然我喜欢hack)。
1071 0
|
JavaScript Perl 开发工具