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中数据的批量导入(csv文件)
Oct 09 PHP
深入phpMyAdmin的安装与配置的详细步骤
May 07 PHP
PHP中echo和print的区别
Aug 28 PHP
ThinkPHP中关联查询实例
Dec 02 PHP
php调用mysql存储过程实例分析
Dec 29 PHP
PHP实现从远程下载文件的方法
Mar 12 PHP
PHP+MYSQL实现用户的增删改查
Mar 24 PHP
PHP实现批量上传单个文件
Dec 29 PHP
PHP中explode函数和split函数的区别小结
Aug 24 PHP
windows7配置Nginx+php+mysql的详细教程
Sep 04 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
Feb 27 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侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
2009/10/15 PHP
PHP网站安装程序制作的原理、步骤、注意事项和示例代码
2010/08/01 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
PHP单例模式详解及实例代码
2016/12/21 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
php连接MSsql server的五种方法总结
2018/03/04 PHP
使用js实现雪花飘落效果
2013/08/26 Javascript
JavaScript/Js脚本处理html元素的自定义属性解析(亲测兼容Firefox与IE)
2013/11/25 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
JavaScript实现同一页面内两个表单互相传值的方法
2015/08/12 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
canvas绘制七巧板
2017/02/03 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
express+mockjs实现模拟后台数据发送功能
2018/01/07 Javascript
vue点击input弹出带搜索键盘并监听该元素的方法
2018/08/25 Javascript
解决vue的变量在settimeout内部效果失效的问题
2018/08/30 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
Vue封装Axios请求和拦截器的步骤
2020/09/16 Javascript
Python批量修改文件后缀的方法
2014/01/26 Python
Python求两个list的差集、交集与并集的方法
2014/11/01 Python
Pandas统计重复的列里面的值方法
2019/01/30 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
2020/03/30 Python
学会python自动收发邮件 代替你问候女友
2020/05/20 Python
Pycharm修改python路径过程图解
2020/05/22 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
Coach澳大利亚官方网站:美国著名时尚奢侈品牌
2017/05/24 全球购物
德国前卫设计师时装在线商店:Luxury Loft
2019/11/04 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
活动邀请函范文
2014/01/19 职场文书
机械专业技术员求职信
2014/06/14 职场文书
2015年全国科普日活动总结
2015/03/23 职场文书
风之谷观后感
2015/06/11 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
2019年特色火锅店的创业计划书模板
2019/08/28 职场文书
Opencv实现二维直方图的计算及绘制
2021/07/21 Python