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


Posted in PHP onAugust 16, 2014

今天在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")." <br>"; 
         }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 ("<font color=red>BOM found, automatically removed.</font>"); 
     } else { 
       return ("<font color=red>BOM found.</font>"); 
     } 
   } 
   else return ("BOM Not Found."); 
 } 
  
 function rewrite ($filename, $data) {
   $filenum = fopen($filename, "w"); 
   flock($filenum, LOCK_EX); 
   fwrite($filenum, $data); 
   fclose($filenum); 
}
PHP 相关文章推荐
用PHP编程开发“虚拟域名”系统
Oct 09 PHP
PHP下编码转换函数mb_convert_encoding与iconv的使用说明
Dec 16 PHP
discuz程序的PHP加密函数原理分析
Aug 05 PHP
体育彩票排列三组选三算法分享
Mar 07 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
Apr 10 PHP
PHP 如何获取二维数组中某个key的集合
Jun 03 PHP
php取得字符串首字母的方法
Mar 25 PHP
php里array_work用法实例分析
Jul 13 PHP
详解PHP用substr函数截取字符串中的某部分
Dec 03 PHP
PHP/ThinkPHP实现批量打包下载文件的方法示例
Jul 31 PHP
原生PHP实现导出csv格式Excel文件的方法示例【附源码下载】
Mar 07 PHP
php中的依赖注入实例详解
Aug 14 PHP
php socket实现的聊天室代码分享
Aug 16 #PHP
php与flash as3 socket通信传送文件实现代码
Aug 16 #PHP
php操作XML、读取数据和写入数据的实现代码
Aug 15 #PHP
php中操作memcached缓存进行增删改查数据的实现代码
Aug 15 #PHP
php上传图片之时间戳命名(保存路径)
Aug 15 #PHP
php中将一段数据存到一个txt文件中并显示其内容
Aug 15 #PHP
PHP反向代理类代码
Aug 15 #PHP
You might like
php+lottery.js实现九宫格抽奖功能
2019/07/21 PHP
js Flash插入函数免激活代码
2009/03/31 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
jQuery中实现动画效果的基本操作介绍
2013/04/16 Javascript
javascript列表框操作函数集合汇总
2013/11/28 Javascript
Jquery中children与find之间的区别详细解析
2013/11/29 Javascript
JS小功能(button选择颜色)简单实例
2013/11/29 Javascript
在JS中解析HTML字符串示例代码
2014/04/16 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
js验证框架实现代码分享
2016/05/18 Javascript
JavaScript第一篇之实现按钮全选、功能
2016/08/21 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
史上最全JavaScript数组去重的十种方法(推荐)
2017/08/17 Javascript
使用express+multer实现node中的图片上传功能
2018/02/02 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
layer更改皮肤的实现方法
2019/09/11 Javascript
vue+elementui 对话框取消 表单验证重置示例
2019/10/29 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
Python中文件操作简明介绍
2015/04/13 Python
简单了解Python下用于监视文件系统的pyinotify包
2015/11/13 Python
python3音乐播放器简单实现代码
2020/04/20 Python
Python 遍历列表里面序号和值的方法(三种)
2017/02/17 Python
Python2.7.10以上pip更新及其他包的安装教程
2018/06/12 Python
pandas去除重复列的实现方法
2019/01/29 Python
Django Admin 上传文件到七牛云的示例代码
2020/06/20 Python
如何在mac下配置python虚拟环境
2020/07/06 Python
Python3中小括号()、中括号[]、花括号{}的区别详解
2020/11/15 Python
几道数据库的概念性面试题
2014/05/30 面试题
工程总经理工作职责
2013/12/09 职场文书
助人为乐表扬信范文
2014/01/14 职场文书
企业管理毕业生求职信范文
2014/03/07 职场文书
我爱我校演讲稿
2014/05/21 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
党的群众路线教育实践活动个人对照检查材料(公安)
2014/11/05 职场文书
tensorflow+k-means聚类简单实现猫狗图像分类的方法
2021/04/28 Python
深入解析Apache Hudi内核文件标记机制
2022/03/31 Servers