php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法


Posted in PHP onAugust 10, 2013

date.csv:
"ID" "NAME" "EMAIL"
"1" "小明" "xm@163.com"
"2" "小东" "xd@sina.com"
"3" "小少" "shaozi@hotmai.com"

读取这个csv文件

<?php
$handle=fopen('date.csv','r');
while($data=fgetcsv($handle,10000,"/t"))   
{   
  echo "$data[0]"."$data[1]"."$data[2]";   
}
?>

读取后在页面上显示时,成了这样:
"ID" NAME EMAIL
 1 小明 xm@163.com
 2 小东 xd@sina.com
 3 小少 shaozi@hotmai.com
fgetcsv函数的字段环绕符默认是双引号,
为什么我读取出来时,其它字段都好好的,可是ID还有双引号包着?

上网查了下,原来是utf8编码的bom在php下无法识别.
下面是查来的资料:
Unicode规范中有一个BOM的概念。BOM——Byte Order Mark,就是字节序标记。在
这里
找到一段关于BOM的说明:
在UCS 编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
Windows就是使用BOM来标记文本文件的编码方式的。

另外unicode网站的
FAQ-BOM
详细介绍了BOM。官方的自然权威,不过是英文的,看起来比较费劲。
UTF-8编码的文件中,BOM占三个字节。如果用记事本把一个文本文件另存为UTF-8编码方式的话,用UE打开这个文件,切换到十六进制编辑状态就可以看到开头的FFFE了。这是个标识UTF-8编码文件的好办法,软件通过BOM来识别这个文件是否是UTF-8编码,很多软件还要求读入的文件必须带BOM。可是,还是有很多软件不能识别BOM。我在研究Firefox的时候就知道,在Firefox早期的版本里,扩展是不能有BOM的,不过Firefox 1.5以后的版本已经开始支持BOM了。现在又发现,PHP也不支持BOM。

PHP在设计时就没有考虑BOM的问题,也就是说他不会忽略UTF-8编码的文件开头BOM的那三个字符。由于必须在转换->UTF-8转ASCII,或者在另存为里选择ASCII编码。如果是DOS格式的行尾符,可以用记事本打开,点另存为,选ASCII编码。如果包含中文字符的话,可以用UE的另存为功能,选择“UTF-8 无 BOM”即可。请参考下面的图片:
php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法

根据Bo-Blog的wiki的说明:Editplus需要先另存为gb,再另存为UTF-8。不过这样做要小心,所有GBK编码中不包含的字符就会都丢了。如果有一些非中文的字符在文件里的话还是不要用这种办法了。(从这一个小方面来看,UE——UltraEdite-32确实比Editplus好很多,Editplus太轻量级了)

另外我发现了一个办法,就是利用Wordpress提供的文件编辑器。这个办法不受限制,不需要去下载专门的编辑器,毕竟大家都在用Wordpress嘛。先在ftp里把要编辑的文件的写入权限打开,然后进入Wordpress后台->管理->文件编辑器,输入要编辑文件的路径,点编辑文件。在显示出来的编辑界面中,你是看不到开头的那三个字符的,不过没关系,把光标定位在整个文件的第一个字符前,按一下Backspace键。OK了,点更新文件吧,在ftp里刷新一下,可以看到文件小了3字节,大功告成。

最后说一下,这是个大问题,所有要自己写插件的,编辑别人的插件自己用的,需要修改模版的(这条估计每个人都需要吧),最好了解一下上面的知识,免得出现问题时不知所措。

PHP 相关文章推荐
php下批量挂马和批量清马代码
Feb 27 PHP
php中记录用户访问过的产品,在cookie记录产品id,id取得产品信息
May 04 PHP
学习php过程中的一些注意点的总结
Oct 25 PHP
php中有关合并某一字段键值相同的数组合并的改进
Mar 10 PHP
php生成二维码
Aug 10 PHP
php实现scws中文分词搜索的方法
Dec 25 PHP
PHP数学运算函数大汇总(经典值得收藏)
Apr 01 PHP
PHP版微信小店接口开发实例
Nov 12 PHP
php使用GD2绘制几何图形示例
Feb 15 PHP
php+webSoket实现聊天室示例代码(附源码)
Feb 17 PHP
Laravel框架实现的记录SQL日志功能示例
Jun 19 PHP
PHP 代码简洁之道(小结)
Oct 16 PHP
浅析php中常量,变量的作用域和生存周期
Aug 10 #PHP
浅析linux下apache服务器的配置和管理
Aug 10 #PHP
本地机apache配置基于域名的虚拟主机详解
Aug 10 #PHP
php 删除目录下N分钟前创建的所有文件的实现代码
Aug 10 #PHP
php中如何判断一个网页请求是ajax请求还是普通请求
Aug 10 #PHP
php一些错误处理的方法与技巧总结
Aug 10 #PHP
Zend Studio 实用快捷键一览表(精心整理)
Aug 10 #PHP
You might like
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
Linux下手动编译安装PHP扩展的例子分享
2014/07/15 PHP
PHP使用strtotime获取上个月、下个月、本月的日期
2015/12/30 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
2017/05/29 PHP
PHP工厂模式、单例模式与注册树模式实例详解
2019/06/03 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
javascript 播放器 控制
2007/01/22 Javascript
打开超链需要“确认”对话框的方法
2007/03/08 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
使用javascript实现json数据以csv格式下载
2015/01/09 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
JavaScript跨域调用基于JSON的RESTful API
2016/07/09 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
JS百度地图搜索悬浮窗功能
2017/01/12 Javascript
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
快速搭建Node.js(Express)用户注册、登录以及授权的方法
2019/05/09 Javascript
javascript创建元素和删除元素实例小结
2019/06/19 Javascript
Vue 数据绑定的原理分析
2020/11/16 Javascript
详解Python中用于计算指数的exp()方法
2015/05/14 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
2015/12/31 Python
Python切换pip安装源的方法详解
2016/11/18 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
python学生管理系统学习笔记
2019/03/19 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
TFRecord格式存储数据与队列读取实例
2020/01/21 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
2020/04/24 Python
10个python爬虫入门基础代码实例 + 1个简单的python爬虫完整实例
2020/12/16 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
关于探究python中sys.argv时遇到的问题详解
2021/02/23 Python
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
技校毕业生个人学习的自我评价
2014/02/21 职场文书
访谈节目策划方案
2014/05/15 职场文书
三年级上册科学教学计划
2015/01/21 职场文书
python如何做代码性能分析
2021/04/26 Python
php解析非标准json、非规范json的方式实例
2022/05/10 PHP