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实现的随机广告显示代码
Jun 14 PHP
五个PHP程序员工具
May 26 PHP
PHP 文件上传源码分析(RFC1867)
Oct 30 PHP
分享下页面关键字抓取components.arrow.com站点代码
Jan 30 PHP
destoon二次开发入门示例
Jun 20 PHP
PHPUnit安装及使用示例
Oct 29 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
Dec 30 PHP
PHP与Java对比学习日期时间函数
Jul 03 PHP
php 读写json文件及修改json的方法
Mar 07 PHP
PHP 获取客户端 IP 地址的方法实例代码
Nov 11 PHP
PHP示例演示发送邮件给某个邮箱
Apr 03 PHP
PHP面试题 wakeup魔法 Ezpop pop序列化与反序列化
Apr 11 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下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
php 生成自动创建文件夹并上传文件的示例代码
2014/03/07 PHP
PHP文件上传判断file是否己选择上传文件的方法
2014/11/10 PHP
Symfony的安装和配置方法
2016/03/17 PHP
关于JavaScript的gzip静态压缩方法
2007/01/05 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
2012/12/28 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
深入理解JavaScript系列(42):设计模式之原型模式详解
2015/03/04 Javascript
jQuery EasyUI Dialog拖不下来如何解决
2015/09/28 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
js创建jsonArray传输至后台及后台全面解析
2016/04/11 Javascript
JavaScript简单实现弹出拖拽窗口(一)
2016/06/17 Javascript
vue-router路由参数刷新消失的问题解决方法
2017/06/17 Javascript
如何理解Vue的render函数的具体用法
2017/08/30 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
微信小程序非swiper组件实现的自定义伪3D轮播图效果示例
2018/12/11 Javascript
微信小程序自定义导航栏实例代码
2019/04/05 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
在Python的Django框架中为代码添加注释的方法
2015/07/16 Python
在cmd命令行里进入和退出Python程序的方法
2018/05/12 Python
TensorFlow实现Logistic回归
2018/09/07 Python
python gensim使用word2vec词向量处理中文语料的方法
2019/07/05 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
匈牙利墨盒和碳粉购买网站:CDRmarket
2018/04/14 全球购物
加拿大在线眼镜零售商:SmartBuyGlasses加拿大
2019/05/25 全球购物
AURALog面试题软件测试方面
2013/10/22 面试题
学习十八大坚定理想信念心得体会
2014/03/11 职场文书
幼儿园六一儿童节文艺汇演主持词
2014/03/21 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
安阳殷墟导游词
2015/02/10 职场文书
单位工作证明范本
2015/06/15 职场文书
spring boot项目application.properties文件存放及使用介绍
2021/06/30 Java/Android