AD

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

以下是对php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法进行了详细的分析介绍,需要的朋友可以过来参考下

date.csv:
"ID" "NAME" "EMAIL"
"1" "小明" "[email protected]"
"2" "小东" "[email protected]"
"3" "小少" "[email protected]"

读取这个csv文件

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

读取后在页面上显示时,成了这样:
"ID" NAME EMAIL
1 小明 [email protected]
2 小东 [email protected]
3 小少 [email protected]
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字节,大功告成。

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

标签: bom, 读取CSV文件, uft8
分类: php技巧
时间: 2014-09-25

相关文章

  1. java读取csv文件和写csv示例分享

    这篇文章主要介绍了JAVA对CSV格式文本数据处理后再保存成新CSV格式文本的模板,可以学习到java读取csv文件和写csv的方法,需要的朋友可以参考下 import java.io.BufferedReader; i ...
  2. php使用fgetcsv读取csv文件出现乱码的解决方法

    这篇文章主要介绍了php使用fgetcsv读取csv文件出现乱码的解决方法,实例分析了造成乱码的原因与对应的解决方法,并给出了Linux平台下的乱码解决方法,需要的朋友可以参考下 本文实例讲述了php使用fgetcsv读 ...
  3. java读取csv文件内容示例代码

    这篇文章主要介绍了java读取csv文件内容的示例,大家参考使用 package com.huateng.readcsv; import java.io.BufferedReader; import java.io.Fi ...
  4. java读取csv文件示例分享(java解析csv文件)

    这篇文章主要介绍了java读取csv文件示例,这个java解析csv文件的例子很简单,下面直接上代码,大家参考使用吧 import java.io.*; import java.util.*; public class ...
  5. c语言读取csv文件和c++读取csv文件示例分享

    这篇文章主要介绍了c语言读取csv文件和c++读取csv文件示例,需要的朋友可以参考下 C读取csv文件 #include <stdio.h> #include <string.h> char * ...
  6. js读取csv文件并使用json显示出来

    这篇文章主要介绍了js读取csv文件并使用json显示出来,需要的朋友可以参考下 摘要: 前面分享了用js将json数据下载为csv文件,方便后期管理.但是对于测试人员更希望能够以页面的形式展现任务,所以就做了一个将cs ...
  7. php读取csv文件并输出的方法

    这篇文章主要介绍了php读取csv文件并输出的方法,涉及php中fgetcsv函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下 本文实例讲述了php读取csv文件并输出的方法.分享给大家供大家参考.具体实现方法 ...
  8. go语言读取csv文件并输出的方法

    这篇文章主要介绍了go语言读取csv文件并输出的方法,实例分析了go语言操作csv文件的技巧,需要的朋友可以参考下 本文实例讲述了go语言读取csv文件并输出的方法.分享给大家供大家参考.具体实现方法如下: packag ...
  9. python读取csv文件示例(python操作csv)

    这篇文章主要介绍了python读取csv文件示例,这个示例简单说明了一下python操作csv的方法,需要的朋友可以参考下 import csv for line in open("test.csv" ...
  10. 基于PHP读取csv文件内容的详解

    本篇文章是对PHP读取csv文件的内容进行了详细的分析介绍,需要的朋友参考下 一次性读取csv文件内所有行的数据 <?php $file = fopen('windows_2011_s.csv','r'); whi ...
  11. PHP读取csv文件内容的方法详解

    PHP读取csv文件的内容的方法. 一次性读取csv文件内所有行的数据 <?php $file = fopen('windows_2011_s.csv','r'); while ($data = fgetcsv($ ...
  12. ASP的chr(0)文件上传漏洞原理和解决方法介绍

    这篇文章主要介绍了ASP的chr(0)文件上传漏洞原理和解决方法介绍,chr(0)漏洞在上传文件时可以绕过扩展名验证,是一个危害非常大的漏洞,需要的朋友可以参考下 我们在用ASP开发文件上传功能的时候,为了防止用户上传木 ...
  13. php实现将wav文件转换成图像文件并在页面中显示的方法

    这篇文章主要介绍了php实现将wav文件转换成图像文件并在页面中显示的方法,涉及php中unpack.fopen.fread等方法及图形操作的相关技巧,需要的朋友可以参考下 本文实例讲述了php实现将wav文件转换成图像 ...
  14. 安装sql server2008后再安装sql 2005找不到本地服务器的解决方法

    这篇文章主要介绍了安装sql server2008后再安装sql 2005找不到本地服务器的解决方法,需要的朋友可以参考下 最近在项目中安装sql server 2005,发现找不到本地服务器,因为此前我已经安装了sql ...
  15. PHP读取csv文件转换成JSON并写入新的文件

    没什么好说的,直接上代码. <?php function csvJSON() { // data.csv 是你的csv文件 $lines = array_map('str_getcsv', file('data.c ...
  16. 由于mysql运行权限导致无法找到 Discuz! 论坛数据表! 的解决方法

    无法找到 Discuz! 论坛数据表! 在5.5升级到6.0时,上传完后,运行http://*****.com/upgrade9.php 时出下下列问题: 无法找到 Discuz! 论坛数据表! 请修改 config.i ...
  17. smarty中css文件在IE中显示不正常的解决方法

    今天遇到一个奇怪的问题,css文件在smarty模板中引入后,用firefox访问显示正常但是用IE访问css的效果不显示,查了很多资料也还是不能显示出来,后来经一位朋友指点,去除了css文件中的汉语注释,立即正常显示, ...
  18. asp.net updatepanel 导致JS不能加载,而无法使用的解决方法

    asp.net updatepanel 局部刷新,导致JS不能加载,而无法使用,而且 updatepanel会刷两次,郁闷的,解决方法如下 <script type="text/javascript&qu ...
  19. serv-u与屏保导致serv-u服务器经常停止无法连接的解决方法

    公司win2003服务器发现serv-u一直以来都有经常暂停无法连接的问题只有重新启动serv-u才能解决serv-u停止问题,还以为是版本或者流量的关系 公司win2003服务器发现serv-u一直以来都有经常暂停无法 ...