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和ACCESS写聊天室(一)
Oct 09 PHP
PHP操作XML作为数据库的类
Dec 19 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
通过table标签,PHP输出EXCEL的实现方法
Jul 24 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
php模板原理讲解
Nov 13 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
thinkphp框架下实现登录、注册、找回密码功能
Apr 06 PHP
php 解决substr()截取中文字符乱码问题
Jul 18 PHP
PHP获取ttf格式文件字体名的方法示例
Mar 06 PHP
php的对象传值与引用传值代码实例讲解
Feb 26 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
咖啡的传说和历史
2021/03/03 新手入门
Javascript客户端脚本的设计和应用
2006/08/21 Javascript
Js+Dhtml:WEB程序员简易开发工具包(预先体验版)
2006/11/07 Javascript
javascript 运算数的求值顺序
2011/08/23 Javascript
JQuery实现简单时尚快捷的气泡提示插件
2012/12/20 Javascript
指定区域的图片自动按比例缩小的js代码(防止页面被图片撑破)
2014/02/21 Javascript
解决js下referer兼容各大浏览器的方法
2014/11/03 Javascript
jquery实现仿Flash的横向滑动菜单效果代码
2015/09/17 Javascript
深入理解关于javascript中apply()和call()方法的区别
2016/04/12 Javascript
JS中对数组元素进行增删改移的方法总结
2016/12/15 Javascript
js正则表达式校验指定字符串的方法
2018/07/23 Javascript
JavaScript递归函数定义与用法实例分析
2019/01/24 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
js实现小星星游戏
2020/03/23 Javascript
如何解决jQuery 和其他JS库的冲突
2020/06/22 jQuery
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
VUE-ElementUI 自定义Loading图操作
2020/11/11 Javascript
Python入门篇之正则表达式
2014/10/20 Python
python实现马耳可夫链算法实例分析
2015/05/20 Python
Python变量作用范围实例分析
2015/07/07 Python
Python实现数通设备端口使用情况监控实例
2015/07/15 Python
python实现发送邮件及附件功能
2021/03/02 Python
python实现杨辉三角思路
2017/07/14 Python
Python3 replace()函数使用方法
2018/03/19 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
python 实现创建文件夹和创建日志文件的方法
2019/07/07 Python
Python占用的内存优化教程
2019/07/28 Python
Tensorflow的常用矩阵生成方式
2020/01/04 Python
PatPat阿根廷:妈妈们的购物平台
2019/05/30 全球购物
对于没有初始化的变量的初始值可以作怎样的假定
2014/10/12 面试题
应届生简历中的自我评价
2014/01/13 职场文书
自我介绍演讲稿
2014/01/15 职场文书
学习心理学的体会
2014/11/07 职场文书
护士求职自荐信
2015/03/25 职场文书
Golang gRPC HTTP协议转换示例
2022/06/16 Golang