当前位置:首页 > PHP教程 > php高级应用 > 列表

php中隐形字符65279(utf-8的BOM头)问题

发布:smiling 来源: PHP粉丝网  添加日期:2021-03-31 10:55:10 浏览: 评论:0 

这篇文章主要介绍了php中隐形字符65279问题解决方法,其实就是utf-8文件的BOM头,本文给出了一个删除PHP文件BOM头的小程序,需要的朋友可以参考下

今天在CSDN看到一个php输出空白隐形字符65279的问题,在网上找了下,发下这个65279字符是php用来标记文件是utf-8编码的,输出的时候会一起输出到客户端,导致客户端如果使用ajax得到返回值时,无法匹配字符串。

php隐形字符65279解释如下:

UTF-8 编码的文件可以分为无 BOM 和 BOM 两种格式。

何谓BOM?

"EF BB BF" 这三个字节就叫BOM,全称是"Byte Order Mard"。在utf8文件中常用BOM来表明这个文件是UTF-8文件,而BOM的本意是在utf16中用。

utf-8文件在php中输出的时候bom是会被输出的,所以要在php中使用utf-8,必须要是使用不带bom头的utf-8文件。

常用的文本编辑软件对utf-8文件保存的支持方式并不一样,使用的时候要特别留意。

例如:

1、使用ultraedit时,另存时会有“UTF-8”和“UTF-8 - 无BOM”两种选择。

2、 window的记事本保存的是带bom的。

3、EditPlus软件不同版本对utf-8的保存支持不一样,例如:2.31版本保存的是不带bom的,2.11版本保存的是带bom的。

把utf-8文件头去掉的办法:

1、使用ultraedit另存,选择“UTF-8 - 无BOM”

2、一个很有用的php程序,放在站点根目录下运行,会把目录下全部utf-8文件的bom头去掉,代码如下:

  1. //remove the utf-8 boms  
  2.  //by magicbug at gmail dot com  
  3.     
  4.  if (isset($_GET['dir'])){ //config the basedir  
  5.    $basedir=$_GET['dir'];  
  6.  }else{  
  7.    $basedir = '.';  
  8.  }  
  9.     
  10.  $auto = 1;  
  11.     
  12.  checkdir($basedir);  
  13.     
  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 "filename 
  20.  $basedir/$file ".checkBOM("$basedir/$file")." <br>";  
  21.          }else{  
  22.            $dirname = $basedir."/".$file;  
  23.            checkdir($dirname);  
  24.          }  
  25.        }  
  26.      }  
  27.    closedir($dh);  
  28.    }  
  29.  }  
  30.     
  31.  function checkBOM ($filename) {  
  32.    global $auto;  
  33.    $contents = file_get_contents($filename);  
  34.    $charset[1] = substr($contents, 0, 1);  
  35.    $charset[2] = substr($contents, 1, 1);  
  36.    $charset[3] = substr($contents, 2, 1);  
  37.    if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191) {  
  38.      if ($auto == 1) {  
  39.        $rest = substr($contents, 3);  
  40.        rewrite ($filename$rest);  
  41.        return ("<font color=red>BOM found, automatically removed.</font>");  
  42.      } else {  
  43.        return ("<font color=red>BOM found.</font>");  
  44.      }  
  45.    }  
  46.    else return ("BOM Not Found.");  
  47.  }  
  48.     
  49.  function rewrite ($filename$data) { 
  50.    $filenum = fopen($filename"w");  
  51.    flock($filenum, LOCK_EX);  
  52.    fwrite($filenum$data);  
  53.    fclose($filenum);  

Tags: 65279 utf-8 BOM头

分享到: