php 读取 csv 文件后, uft8bom 导致在页面上显示出现问题的解决方法
date.csv:
"ID""NAME""EMAIL"
"1""小明""xm@163.com"
"2""小东""xd@sina.com"
"3""小少""shaozi@hotmai.com"
读取这个 csv 文件
代码如下:$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 的概念 BOMByte 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 即可请参考下面的图片:
根据 Bo-Blog 的 wiki 的说明: Editplus 需要先另存为 gb, 再另存为 UTF-8 不过这样做要小心, 所有 GBK 编码中不包含的字符就会都丢了如果有一些非中文的字符在文件里的话还是不要用这种办法了 (从这一个小方面来看, UEUltraEdite-32 确实比 Editplus 好很多, Editplus 太轻量级了)
另外我发现了一个办法, 就是利用 Wordpress 提供的文件编辑器这个办法不受限制, 不需要去下载专门的编辑器, 毕竟大家都在用 Wordpress 嘛先在 ftp 里把要编辑的文件的写入权限打开, 然后进入 Wordpress 后台 -> 管理 -> 文件编辑器, 输入要编辑文件的路径, 点编辑文件在显示出来的编辑界面中, 你是看不到开头的那三个字符的, 不过没关系, 把光标定位在整个文件的第一个字符前, 按一下 Backspace 键 OK 了, 点更新文件吧, 在 ftp 里刷新一下, 可以看到文件小了 3 字节, 大功告成
最后说一下, 这是个大问题, 所有要自己写插件的, 编辑别人的插件自己用的, 需要修改模版的 (这条估计每个人都需要吧), 最好了解一下上面的知识, 免得出现问题时不知所措
来源: https://www.php1.cn/detail/php-e98396104d.html