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 相关文章推荐
支持php4、php5的mysql数据库操作类
Jan 10 PHP
请php正则走开
Mar 15 PHP
一个简单php扩展介绍与开发教程
Aug 19 PHP
PHP中date()日期函数有关参数整理
Jul 19 PHP
php递归创建和删除文件夹的代码小结
Apr 13 PHP
php获取文件夹路径内的图片以及分页显示示例
Mar 11 PHP
php利用递归实现删除文件目录的方法
Sep 23 PHP
php简单实现多维数组排序的方法
Sep 30 PHP
PHP实现腾讯与百度坐标转换
Aug 05 PHP
thinkphp5.1 文件引入路径问题及注意事项
Jun 13 PHP
PHP7内核之Reference详解
Mar 14 PHP
php中数组最简单的使用方法
Dec 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实现的博客欢迎提示功能(很特别哦)
2014/06/05 PHP
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
php 计算两个时间相差的天数、小时数、分钟数、秒数详解及实例代码
2016/11/09 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
2017/04/04 PHP
Yii框架分页实现方法详解
2017/05/20 PHP
PHP分享图片的生成方法
2018/04/25 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
jQuery 获取、设置HTML或TEXT内容的两种方法
2014/05/23 Javascript
JS创建对象几种不同方法详解
2016/03/01 Javascript
AngularJS表单基本操作
2017/01/09 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
利用Javascript实现一套自定义事件机制
2017/12/14 Javascript
Vue路由history模式解决404问题的几种方法
2018/09/29 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
jQuery Ajax async=&gt;false异步改为同步时,解决导致浏览器假死的问题
2019/07/22 jQuery
[01:22:19]EG vs TNC Supermajor小组赛B组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
[31:55]完美世界DOTA2联赛循环赛 IO vs GXR BO2第一场 11.04
2020/11/05 DOTA
python创建临时文件夹的方法
2015/07/06 Python
Python操作mongodb的9个步骤
2018/06/04 Python
Python subprocess模块常见用法分析
2018/06/12 Python
详解Python locals()的陷阱
2019/03/26 Python
python中的selenium安装的步骤(浏览器自动化测试框架)
2020/03/17 Python
python的reverse函数翻转结果为None的问题
2020/05/11 Python
Python如何对XML 解析
2020/06/28 Python
python 装饰器的实际作用有哪些
2020/09/07 Python
The North Face北面英国官网:美国著名户外品牌
2017/12/13 全球购物
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
葡萄牙航空官方网站:TAP Air Portugal
2019/10/31 全球购物
我的画教学反思
2014/04/28 职场文书
单位委托书范本(3篇)
2014/09/18 职场文书
初中成绩单评语
2014/12/29 职场文书
2015年端午节活动总结
2015/02/11 职场文书
KTV员工管理制度
2015/08/06 职场文书
Go 中的空白标识符下划线
2022/03/25 Golang