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作的文本留言本的例子(五)
Oct 09 PHP
PHP脚本的10个技巧(3)
Oct 09 PHP
PHP制作图型计数器的例子
Oct 09 PHP
php合并js请求的例子
Nov 01 PHP
一个php短网址的生成代码(仿微博短网址)
May 07 PHP
php下载文件源代码(强制任意文件格式下载)
May 09 PHP
兼容PHP和Java的des加密解密代码分享
Jun 26 PHP
PHP实现更新中间关联表数据的两种方法
Sep 01 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
php脚本守护进程原理与实现方法详解
Jul 20 PHP
php实现映射操作实例详解
Oct 02 PHP
PHP实现页面静态化深入讲解
Mar 04 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下获取客户端ip地址的函数
2010/03/15 PHP
PHP函数实现分页含文本分页和数字分页
2014/10/23 PHP
抛弃 PHP 代价太高
2016/04/26 PHP
Linux下 php7安装redis的方法
2018/11/01 PHP
Prototype String对象 学习
2009/07/19 Javascript
原生Js与jquery的多组处理, 仅展开一个区块的折叠效果
2011/01/09 Javascript
8款非常棒的响应式jQuery 幻灯片插件推荐
2012/02/02 Javascript
Jquery 切换不同图片示例代码
2013/12/05 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
Google官方支持的NodeJS访问API,提供后台登录授权
2014/07/29 NodeJs
让angularjs支持浏览器自动填表
2014/11/10 Javascript
JavaScript返回0-1之间随机数的方法
2015/04/06 Javascript
JavaScript中Function函数与Object对象的关系
2015/12/17 Javascript
javascript动态添加checkbox复选框的方法
2015/12/23 Javascript
jquery自定义右键菜单、全选、不连续选择
2016/03/01 Javascript
jquery基本选择器匹配多个元素的实现方法
2016/09/05 Javascript
微信小程序 小程序制作及动画(animation样式)详解
2017/01/06 Javascript
使用Node.js实现ORM的一种思路详解(图文)
2017/10/24 Javascript
javascript按顺序加载运行js方法
2017/12/01 Javascript
vue中使用gojs/jointjs的示例代码
2018/08/24 Javascript
js实现蒙版效果
2020/01/11 Javascript
Vue Elenent实现表格相同数据列合并
2020/11/30 Vue.js
[03:57]DOTA2英雄梦之声_第03期_幻影刺客
2014/06/21 DOTA
Python ORM框架SQLAlchemy学习笔记之关系映射实例
2014/06/10 Python
Python标准库内置函数complex介绍
2014/11/25 Python
python傅里叶变换FFT绘制频谱图
2019/07/19 Python
keras 模型参数,模型保存,中间结果输出操作
2020/07/06 Python
如何通过python实现IOU计算代码实例
2020/11/02 Python
Python控制鼠标键盘代码实例
2020/12/08 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
利用CSS3的定位页面元素
2009/08/29 HTML / CSS
关于css中margin的值和垂直外边距重叠问题
2020/10/27 HTML / CSS
英国音乐设备和乐器商店:Gear4music
2017/10/16 全球购物
优秀大学生的自我评价
2014/01/16 职场文书
视光学毕业生自荐书范文
2014/02/13 职场文书
环境日宣传活动总结
2014/07/09 职场文书