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 相关文章推荐
递归列出所有文件和目录
Oct 09 PHP
php 求质素(素数) 的实现代码
Apr 12 PHP
php设计模式 Template (模板模式)
Jun 26 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
codeigniter教程之上传视频并使用ffmpeg转flv示例
Feb 13 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
php如何连接sql server
Oct 16 PHP
深入剖析PHP中printf()函数格式化使用
May 23 PHP
php单例模式的简单实现方法
Jun 10 PHP
PHP延迟静态绑定的深入讲解
Apr 02 PHP
PHP 观察者模式深入理解与应用分析
Sep 25 PHP
浅谈PHP array_search 和 in_array 函数效率问题
Oct 15 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
Drupal 添加模块出现莫名其妙的错误的解决方法(往往出现在模块较多时)
2011/04/18 PHP
php创建多级目录的方法
2015/03/24 PHP
PHP判断字符串长度的两种方法很实用
2015/09/22 PHP
浅析Yii2集成富文本编辑器redactor实例教程
2016/04/25 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
Prototype使用指南之array.js
2007/01/10 Javascript
写的htc的数据表格
2007/01/20 Javascript
关于firefox的ElementTraversal 接口 使用说明
2010/11/11 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
javascript搜索框点击文字消失失焦时文本出现
2014/09/18 Javascript
深入理解javascript构造函数和原型对象
2014/09/23 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
Javascript核心读书有感之语言核心
2015/02/01 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
2015/03/05 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
ajax 提交数据到后台jsp页面及页面跳转问题
2017/01/19 Javascript
JS 设置Cookie 有效期 检测cookie
2017/06/15 Javascript
vue .sync修饰符的使用详解
2018/06/15 Javascript
JS实现深度优先搜索求解两点间最短路径
2019/01/17 Javascript
微信小程序实现的一键拨号功能示例
2019/04/24 Javascript
vue设置导航栏、侧边栏为公共页面的例子
2019/11/01 Javascript
Python中input与raw_input 之间的比较
2017/08/20 Python
Python实现的摇骰子猜大小功能小游戏示例
2017/12/18 Python
详解python中init方法和随机数方法
2019/03/13 Python
推荐值得学习的12款python-web开发框架
2020/08/10 Python
简单几步用纯CSS3实现3D翻转效果
2019/01/17 HTML / CSS
求职者应聘的自我评价
2013/10/16 职场文书
护士求职自荐信范文
2014/03/19 职场文书
服装设计专业毕业生求职信
2014/04/09 职场文书
领导干部民主生活会自我剖析材料范文
2014/09/20 职场文书
离婚协议书该怎么写
2014/10/04 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
2015年税务稽查工作总结
2015/05/26 职场文书
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
分享CSS盒子模型隐藏的几种方式
2022/02/28 HTML / CSS