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下HTTP Response中的Chunked编码实现方法
Nov 19 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
May 06 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
Jun 19 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
分享PHP源码批量抓取远程网页图片并保存到本地的实现方法
Dec 01 PHP
CI(Codeigniter)的Setting增强配置类实例
Jan 06 PHP
PHP闭包函数详解
Feb 13 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
PHP实践教程之过滤、验证、转义与密码详解
Jul 24 PHP
CI框架(CodeIgniter)公共模型类定义与用法示例
Aug 10 PHP
如何运行/调试你的PHP代码
Oct 23 PHP
php中使用array_filter()函数过滤数组实例讲解
Mar 03 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-MySQL教程归纳总结
2008/06/07 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
PHP实现支持GET,POST,Multipart/form-data的HTTP请求类
2014/09/24 PHP
PHP中使用BigMap实例
2015/03/30 PHP
PHP微信开发之有道翻译
2016/06/23 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Laravel多用户认证系统示例详解
2018/03/13 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
JavaScript DOM学习第一章 W3C DOM简介
2010/02/19 Javascript
批量实现面向对象的实例代码
2013/07/01 Javascript
javascript中 try catch用法
2015/08/16 Javascript
javascript运动效果实例总结(放大缩小、滑动淡入、滚动)
2016/01/08 Javascript
jQuery+css实现非常漂亮的水平导航菜单效果
2016/07/27 Javascript
js遮罩效果制作弹出注册界面效果
2017/01/25 Javascript
深入理解JavaScript的async/await
2018/08/05 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
JS指定音频audio在某个时间点进行播放
2020/11/28 Javascript
利用python提取wav文件的mfcc方法
2019/01/09 Python
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
python实现发送邮件
2021/03/02 Python
CSS3的新特性介绍
2008/10/31 HTML / CSS
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
写出二分查找算法的两种实现
2013/05/13 面试题
财务情况说明书范文
2014/05/06 职场文书
事业单位考核材料
2014/05/21 职场文书
环卫工人先进事迹材料
2014/06/02 职场文书
自查自纠工作情况报告
2014/10/29 职场文书
2014年学校食堂工作总结
2014/11/25 职场文书
计划生育个人总结
2015/03/02 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
超详细Python解释器新手安装教程
2021/05/10 Python
解析MySQL binlog
2021/06/11 MySQL
JavaScript高级程序设计之基本引用类型
2021/11/17 Javascript