时时商务社区

标题: php中隐形字符65279(utf-8的BOM头)问题 [打印本页]

作者: 新格网络    时间: 2018-2-14 05:55

            今天在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头去掉,代码如下:
//remove the utf-8 boms
//by magicbug at gmail dot com
  
if (isset($_GET['dir'])){ //config the basedir
   $basedir=$_GET['dir'];
}else{
   $basedir = '.';
}
  
$auto = 1;
  
checkdir($basedir);
  
function checkdir($basedir){
   if ($dh = opendir($basedir)) {
     while (($file = readdir($dh)) !== false) {
       if ($file != '.' && $file != '..'){
         if (!is_dir($basedir."/".$file)) {
           echo "filename
$basedir/$file ".checkBOM("$basedir/$file")."
";
         }else{
           $dirname = $basedir."/".$file;
           checkdir($dirname);
         }
       }
     }
   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 ("
BOM found, automatically removed.
");
     } else {
       return ("
BOM found.
");
     }
   }
   else return ("BOM Not Found.");
}
  
function rewrite ($filename, $data) {
   $filenum = fopen($filename, "w");
   flock($filenum, LOCK_EX);
   fwrite($filenum, $data);
   fclose($filenum);
}
            
            
您可能感兴趣的文章:
  • php utf-8转unicode的函数
  • jq的get传参数在utf-8中乱码问题的解决php版
  • php中utf-8编码下用正则表达式如何匹配汉字
  • PHP 截取字符串函数整理(支持gb2312和utf-8)
  • PHP iconv 解决utf-8和gb2312编码转换问题
  • php UTF-8、Unicode和BOM问题
  • php smarty截取中文字符乱码问题?gb2312/utf-8
  • PHP乱码问题,UTF-8乱码常见问题小结
  • PHP utf-8编码问题,utf8编码,数据库乱码,页面显示输出乱码
  • php中文乱码怎么办如何让浏览器自动识别utf-8
  • php中json_encode UTF-8中文乱码的更好解决方法
  • PHP如何实现Unicode和Utf-8编码相互转换
  • PHP 与 UTF-8 的最佳实践详细介绍
            




    欢迎光临 时时商务社区 (http://bbs.4435.cn/) Powered by Discuz! X3.2