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 相关文章推荐
BBS(php &amp; mysql)完整版(六)
Oct 09 PHP
PHP4实际应用经验篇(5)
Oct 09 PHP
php生成的html meta和link标记在body标签里 顶部有个空行
May 18 PHP
php自动获取目录下的模板的代码
Aug 08 PHP
PHP实现对文本数据库的常用操作方法实例演示
Jul 04 PHP
php更新mysql后获取改变行数的方法
Dec 25 PHP
php数组使用规则分析
Feb 27 PHP
PHP GD库相关图像生成和处理函数小结
Sep 30 PHP
PHP连接MYSQL数据库的3种常用方法
Feb 27 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
Aug 27 PHP
Laravel timestamps 设置为unix时间戳的方法
Oct 11 PHP
浅析PHP echo 和 print 语句
Jun 30 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
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
30 个很棒的PHP开源CMS内容管理系统小结
2011/10/14 PHP
php之readdir函数用法实例
2014/11/13 PHP
PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
2015/04/27 PHP
php实现的日历程序
2015/06/18 PHP
织梦sitemap地图实时推送给百度的教程
2015/08/03 PHP
php redis实现文章发布系统(用户投票系统)
2017/03/04 PHP
js实现带搜索功能的下拉框实时搜索实时匹配
2013/11/05 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
2014/06/06 Javascript
jquery中push()的用法(数组添加元素)
2014/11/25 Javascript
JavaScript通过元素索引号删除数组中对应元素的方法
2015/03/18 Javascript
jQuery实现网页抖动的菜单抖动效果
2015/08/07 Javascript
一不小心就做错的JS闭包面试题
2015/11/25 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
微信js-sdk地理位置接口用法示例
2016/10/12 Javascript
js实现图片360度旋转
2017/01/22 Javascript
Angular中ng-bind和ng-model的区别实例详解
2017/04/10 Javascript
Angular2使用jQuery的方法教程
2017/05/28 jQuery
React组件之间的通信的实例代码
2017/06/27 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
vue弹窗组件的实现示例代码
2018/09/10 Javascript
JS学习笔记之闭包小案例分析
2019/05/29 Javascript
Swiper实现导航栏滚动效果
2020/10/16 Javascript
NumPy 如何生成多维数组的方法
2018/02/05 Python
tensorflow TFRecords文件的生成和读取的方法
2018/02/06 Python
Python代码缩进和测试模块示例详解
2018/05/07 Python
Python中查看变量的类型内存地址所占字节的大小
2019/06/26 Python
python实现五子棋游戏(pygame版)
2020/01/19 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
python 实现围棋游戏(纯tkinter gui)
2020/11/13 Python
TCP协议通讯的过程和步骤是什么
2015/10/18 面试题
网站设计师的岗位职责
2013/11/21 职场文书
中国梦主题教育活动总结
2014/05/05 职场文书
客户答谢会致辞
2015/01/20 职场文书
为什么不建议在go项目中使用init()
2021/04/12 Golang