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 相关文章推荐
改变Apache端口等配置修改方法
Jun 05 PHP
PHP 面向对象详解
Sep 13 PHP
解析php获取字符串的编码格式的方法(函数)
Jun 21 PHP
注意:php5.4删除了session_unregister函数
Aug 05 PHP
php的memcache类分享(memcache队列)
Mar 26 PHP
ThinkPHP CURD方法之page方法详解
Jun 18 PHP
YII模块实现绑定二级域名的方法
Jul 09 PHP
ThinkPHP实现二级循环读取的方法
Nov 03 PHP
PHP实现PDO的mysql数据库操作类
Dec 12 PHP
PHP里的单例类写法实例
Jun 25 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
Dec 19 PHP
基于swoole实现多人聊天室
Jun 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
php5 and xml示例
2006/11/22 PHP
wordpress自定义url参数实现路由功能的代码示例
2013/11/28 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
php中ltrim()、rtrim()与trim()删除字符空格实例
2014/11/25 PHP
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
PHP数组编码gbk与utf8互相转换的两种方法
2016/09/01 PHP
php常用字符函数实例小结
2016/12/29 PHP
Thinkphp5+uploadify实现的文件上传功能示例
2018/05/26 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
利用js正则表达式验证手机号,email地址,邮政编码
2014/01/23 Javascript
javascript中类的定义方式详解(四种方式)
2015/12/22 Javascript
几句话带你理解JS中的this、闭包、原型链
2016/09/26 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
mpvue 如何使用腾讯视频插件的方法
2018/07/16 Javascript
详解如何构建Promise队列实现异步函数顺序执行
2018/10/23 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
Vue路由前后端设计总结
2019/08/06 Javascript
[04:22]DSPL第二期精彩集锦:残血反杀!
2014/12/10 DOTA
详解python字节码
2018/02/07 Python
python实现udp传输图片功能
2020/03/20 Python
降低python版本的操作方法
2020/09/11 Python
浅谈HTML5 服务器推送事件(Server-sent Events)
2017/08/01 HTML / CSS
大韩航空官方网站:Korean Air
2017/10/25 全球购物
小学生新年寄语
2014/04/03 职场文书
学校四群教育实施方案
2014/06/12 职场文书
大班下学期幼儿评语
2014/12/30 职场文书
2015年社区纪检工作总结
2015/04/21 职场文书
《山中访友》教学反思
2016/02/24 职场文书
Python使用海龟绘图实现贪吃蛇游戏
2021/06/18 Python
MyBatis 动态SQL全面详解
2021/10/05 MySQL
vue cli4中mockjs在dev环境和build环境的配置详情
2022/04/06 Vue.js