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 静态变量与自定义常量的使用方法
Jan 26 PHP
rrmdir php中递归删除目录及目录下的文件
May 15 PHP
web server使用php生成web页面的三种方法总结
Oct 28 PHP
腾讯QQ微博API接口获取微博内容
Oct 30 PHP
在SAE上搭建最新wordpress的方法
Dec 21 PHP
php调用KyotoTycoon简单实例
Apr 02 PHP
php计算多维数组中所有值总和的方法
Jun 24 PHP
PHP使用NuSOAP调用Web服务的方法
Jul 18 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
PHP实现二维数组根据key进行排序的方法
Dec 30 PHP
PHP那些琐碎的知识点(整理)
May 20 PHP
PHP高精确度运算BC函数库实例详解
Aug 15 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
德生S2000收音机更换“钕铁硼”全频扬声器
2021/03/02 无线电
个人写的PHP验证码生成类分享
2014/08/21 PHP
javaScript call 函数的用法说明
2010/04/09 Javascript
使用Java实现简单的server/client回显功能的方法介绍
2013/05/03 Javascript
JAVASCRIPT模式窗口中下载文件无法接收iframe的流
2013/10/11 Javascript
解决jquery版本冲突的有效方法
2014/09/02 Javascript
jQuery中detach()方法用法实例
2014/12/25 Javascript
jQuery 处理页面的事件详解
2015/01/20 Javascript
JS实现黑色大气的二级导航菜单效果
2015/09/18 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
2017/01/20 Javascript
详解打造 Vue.js 可复用组件
2017/03/24 Javascript
使用Browserify来实现CommonJS的浏览器加载方法
2017/05/14 Javascript
深入剖析JavaScript instanceof 运算符
2019/06/14 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
2019/09/01 Javascript
JavaScript 反射和属性赋值实例解析
2019/10/28 Javascript
js刷新页面location.reload()用法详解
2019/12/09 Javascript
JavaScript如何操作css
2020/10/24 Javascript
[04:09]2014DOTA2国际邀请赛Ti西雅图 历届冠军相继出局 BBC综述今日比赛
2014/07/20 DOTA
Python的包管理器pip更换软件源的方法详解
2016/06/20 Python
浅谈Python中用datetime包进行对时间的一些操作
2016/06/23 Python
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
Python从零开始创建区块链
2018/03/06 Python
TensorFlow搭建神经网络最佳实践
2018/03/09 Python
浅析python的优势和不足之处
2018/11/20 Python
python项目对接钉钉SDK的实现
2019/07/15 Python
浅谈Python 钉钉报警必备知识系统讲解
2020/08/17 Python
python 使用三引号时容易犯的小错误
2020/10/21 Python
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
JD Sports西班牙:英国领先的运动服装公司
2020/01/06 全球购物
Brasty罗马尼亚:购买手表、香水、化妆品、珠宝
2020/04/21 全球购物
《美丽的小路》教学反思
2014/02/26 职场文书
幼儿园教师获奖感言
2014/03/11 职场文书
物流专业求职信
2014/06/30 职场文书
js实现上传图片到服务器
2021/04/11 Javascript
MySQL主从搭建(多主一从)的实现思路与步骤
2021/05/13 MySQL
详解python字符串驻留技术
2021/05/21 Python