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 相关文章推荐
BBS(php &amp; mysql)完整版(六)
Oct 09 PHP
PHP下10件你也许并不了解的事情
Sep 11 PHP
PHP 开发环境配置(Zend Server安装)
Apr 28 PHP
php switch语句多个值匹配同一代码块的实现
Mar 03 PHP
php表单请求获得数据求和示例
May 15 PHP
PHP里8个鲜为人知的安全函数分析
Dec 09 PHP
Zend Framework实现具有基本功能的留言本(附demo源码下载)
Mar 22 PHP
PHP构造二叉树算法示例
Jun 21 PHP
一个实用的php验证码类
Jul 06 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
PHP常见字符串操作函数与用法总结
Mar 04 PHP
在Laravel 中实现是否关注的示例
Oct 22 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
php4的session功能评述(三)
2006/10/09 PHP
10条PHP编程习惯助你找工作
2008/09/29 PHP
php中Smarty模板初体验
2011/08/08 PHP
解析php中如何直接执行SHELL
2013/06/28 PHP
php将csv文件导入到mysql数据库的方法
2014/12/24 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
jquery 插件实现图片延迟加载效果代码
2010/02/06 Javascript
锋利的jQuery 第三章章节总结的例子
2010/03/23 Javascript
原始的js代码和jquery对比体会
2013/09/10 Javascript
ECMAScript6中Set/WeakSet详解
2015/06/12 Javascript
Bootstrap中文本框的宽度变窄并且加入一副验证码图片的实现方法
2016/06/23 Javascript
基于BootstrapValidator的Form表单验证(24)
2016/12/12 Javascript
简单实现Bootstrap标签页
2020/08/09 Javascript
JavaScript表单即时验证 验证不成功不能提交
2017/08/31 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
详解解决使用axios发送json后台接收不到的问题
2018/06/27 Javascript
[00:30]塑造者的传承礼包-戴泽“暗影之焰”套装展示视频
2014/04/04 DOTA
用Python的urllib库提交WEB表单
2009/02/24 Python
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
Python中return self的用法详解
2018/07/27 Python
Python中extend和append的区别讲解
2019/01/24 Python
对Python的多进程锁的使用方法详解
2019/02/18 Python
pytorch 常用线性函数详解
2020/01/15 Python
Canvas环形饼图与手势控制的实现代码
2019/11/08 HTML / CSS
英国领先的汽车轮胎和快速健康中心:Kwik Fit
2017/10/29 全球购物
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
化工专业推荐信范文
2013/11/28 职场文书
教师绩效工资方案
2014/02/01 职场文书
财务人员的自我评价范文
2014/03/03 职场文书
2015年全民国防教育日活动总结
2015/03/23 职场文书
党风廉政承诺书2016
2016/03/25 职场文书
Python 如何解决稀疏矩阵运算
2021/05/26 Python
Java中CyclicBarrier和CountDownLatch的用法与区别
2021/08/23 Java/Android
LyScript实现绕过反调试保护的示例详解
2022/08/14 Python