解决乱码、头部空白、&#65279问题去除网页中的BOM属性

  • A+
所属分类:建站记实
前言

树懒先生今天突然想起来很久以前用M1主题建站的时候经常遇到各种头部空白行甚至是乱码和严重错位的问题,当时一脸懵逼不知道如何解决,因为一直使用的Noteped++按理来讲应该是不会出现问题的。随后查阅了资料才知道是BOM的问题。

解决乱码、头部空白、问题去除网页中的BOM属性

BOM只会出现在UTF-8 编码文件中,是因为使用了默认的编辑工具导致出现了BOM签名,理论上树懒先生使用Noteped++编译文件是不会出现问题的,可能是设置错误吧。当时树懒先生百度到了一个非常不错的代码,主题的文件数量是非常庞大的,没法一个一个排查,所以就交给PHP去完成吧。

  1. <?php
  2. /*
  3. **代码来自互联网,由树懒先生(mecrr.com)稍加修改。
  4. */
  5. ?>
  6. <?php
  7. if (isset($_GET['dir'])){
  8. $basedir=$_GET['dir'];
  9. }else{
  10. $basedir = '.';
  11. }
  12. $auto = 1;
  13. checkdir($basedir);
  14. function checkdir($basedir){
  15. if ($dh = opendir($basedir)) {
  16.   while (($file = readdir($dh)) !== false) {
  17.    if ($file != '.' && $file != '..'){
  18.     if (!is_dir($basedir."/".$file)) {
  19.      echo "文件: $basedir/$file ".checkBOM("$basedir/$file")." <br>";
  20.     }else{
  21.      $dirname = $basedir."/".$file;
  22.      checkdir($dirname);
  23.     }
  24.    }
  25.   }
  26. closedir($dh);
  27. }
  28. }
  29. function checkBOM ($filename) {
  30. global $auto;
  31. $contents = file_get_contents($filename);
  32. $charset[1] = substr($contents, 0, 1);
  33. $charset[2] = substr($contents, 1, 1);
  34. $charset[3] = substr($contents, 2, 1);
  35. if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {
  36.   if ($auto == 1) {
  37.    $rest = substr($contents, 3);
  38.    rewrite ($filename$rest);
  39.    return ("<font color=red>发现BOM,别担心已经被清除了.</font>");
  40.   } else {
  41.    return ("<font color=red>发现BOM,但未清除.</font>");
  42.   }
  43. }
  44. else return ("正常...");
  45. }
  46. function rewrite ($filename$data) {
  47. $filenum = fopen($filename"w");
  48. flock($filenum, LOCK_EX);
  49. fwrite($filenum$data);
  50. fclose($filenum);
  51. }
  52. ?>

将以上代码保存为cleanbom.php并通过FTP上传到网站根目录,直接访问http(s)://www.你的域名.com/cleanbom.php即可.

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: