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 相关文章推荐
fleaphp rolesNameField bug解决方法
Apr 23 PHP
php日期转时间戳,指定日期转换成时间戳
Jul 17 PHP
php empty()与isset()区别的详细介绍
Jun 17 PHP
php 下载保存文件保存到本地的两种实现方法
Aug 12 PHP
开源php中文分词系统SCWS安装和使用实例
Apr 11 PHP
php图像处理类实例
Jul 28 PHP
PHP使用Memcache时模拟命名空间及缓存失效问题的解决
Feb 27 PHP
Yii2组件之多图上传插件FileInput的详细使用教程
Jun 20 PHP
php中使用websocket详解
Sep 23 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
Thinkphp事务操作实例(推荐)
Apr 01 PHP
PHP实现对xml的增删改查操作案例分析
May 19 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 cli换行示例
2014/04/22 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
解读JavaScript中 For, While与递归的用法
2013/05/07 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
jquery通过name属性取值的简单实现方法
2016/06/20 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
JS实现改变HTML上文字颜色和内容的方法
2016/12/30 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
vue项目中axios使用详解
2018/02/07 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
jQuery实现监听下拉框选中内容发生改变操作示例
2018/07/13 jQuery
vue拖拽组件使用方法详解
2018/12/01 Javascript
js实现坦克移动小游戏
2019/10/28 Javascript
js实现简单的倒计时
2021/01/28 Javascript
python实现上传下载文件功能
2020/11/19 Python
利用python对Excel中的特定数据提取并写入新表的方法
2018/06/14 Python
对python中for、if、while的区别与比较方法
2018/06/25 Python
Python类装饰器实现方法详解
2018/12/21 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
2019/12/12 Python
python实现控制台输出颜色
2021/03/02 Python
CSS3实现类似翻书效果的过渡动画的示例代码
2019/09/06 HTML / CSS
小女主人连衣裙:Little Mistress
2017/07/10 全球购物
Java基础知识面试要点
2016/07/29 面试题
大学生职业生涯规划书范文
2014/01/14 职场文书
农业开发项目建议书
2014/05/16 职场文书
社区党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
政协会议宣传标语
2014/10/09 职场文书
教师节大会主持词
2015/07/06 职场文书
关于运动会的广播稿
2015/08/19 职场文书
奖学金申请个人主要事迹材料
2015/11/04 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
《秋思》教学反思
2016/02/23 职场文书
css3 实现文字闪烁效果的三种方式示例代码
2021/04/25 HTML / CSS