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的宝库目录--PEAR
Oct 09 PHP
漂亮但不安全的CTB
Oct 09 PHP
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
Feb 16 PHP
PHP zlib扩展实现页面GZIP压缩输出
Jun 17 PHP
Zend Studio去除编辑器的语法警告设置方法
Oct 24 PHP
PHP在引号前面添加反斜杠(PHP去除反斜杠)
Sep 28 PHP
ThinkPHP实现将本地文件打包成zip下载
Jun 26 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
利用PHP生成CSV文件简单示例
Dec 21 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
tp5(thinkPHP5框架)captcha验证码配置及验证操作示例
May 28 PHP
laravel excel 上传文件保存到本地服务器功能
Nov 14 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获取随机数字和字母的方法详解
2013/06/06 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
2017/11/24 PHP
PHP自动载入类文件函数__autoload的使用方法
2019/03/25 PHP
PHP number_format函数原理及实例解析
2020/07/14 PHP
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
分别用marquee和div+js实现首尾相连循环滚动效果,仅3行代码
2011/09/21 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
2013/01/30 Javascript
jquery模拟alert的弹窗插件
2015/07/31 Javascript
javascript实现平滑无缝滚动
2020/08/09 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
vue 父组件通过v-model接收子组件的值的代码
2019/10/27 Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
2019/11/21 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
[01:11:21]DOTA2-DPC中国联赛 正赛 Phoenix vs CDEC BO3 第三场 3月7日
2021/03/11 DOTA
Python while 循环使用的简单实例
2016/06/08 Python
Python一句代码实现找出所有水仙花数的方法
2018/11/13 Python
浅析Python 实现一个自动化翻译和替换的工具
2019/04/14 Python
Python GUI自动化实现绕过验证码登录
2020/01/10 Python
python读取图片的几种方式及图像宽和高的存储顺序
2020/02/11 Python
基于python实现对文件进行切分行
2020/04/26 Python
keras中的backend.clip用法
2020/05/22 Python
SmartBuyGlasses丹麦:网上购买名牌太阳镜、眼镜和隐形眼镜
2016/10/01 全球购物
伦敦最受欢迎的蛋糕店:Konditor & Cook
2019/11/01 全球购物
教师岗位职责范本
2013/12/29 职场文书
2014工程部年度工作总结
2014/12/17 职场文书
上班迟到检讨书范文
2015/05/06 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书
2019教师的学习计划
2019/06/25 职场文书
「我的青春恋爱物语果然有问题。-妄言录-」第20卷封面公开
2022/03/21 日漫
Java实现简单小画板
2022/06/10 Java/Android