手机版

php读取csv文件后 uft8 bom导致页面显示问题的解决方案

时间:2021-11-17 来源:互联网 编辑:宝哥软件园 浏览:

date . csv : ' id ' ' name ' ' email ' ' 1 ' '小明' '[emailprotected]' ' 2 ' ' xidong ' '[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小明[emailprotected]2小董[emailprotected]3小绍[[emailprotected]fgetcsv函数的fgetcsv字段包装默认为双引号。为什么我读出的时候其他字段都是原封不动的,但是ID还是用双引号括起来?在网上搜索了一下,原来utf8编码的bom在php下是无法识别的。发现以下信息:Unicode规范中有一个BOM概念。BOM——Byte字节顺序标记是字节顺序标记。在这里找到一个关于BOM的注释:在UCS代码中有一个名为‘零宽度无间断空格’的字符,它的代码是FEFF。FFFE在UCS中是一个不存在的角色,所以在实际传播中不应该出现。UCS规范建议我们在传输字节流之前先传输字符‘零宽度无中断空间’。这样,如果接收器接收到FEFF,则表明字节流是大端字节流。如果收到FFFE,则表明字节流是小端字节流。因此,字符“零宽度无间断空间”也称为物料清单。UTF-8不需要BOM表示字节顺序,但可以用BOM表示编码方式。字符“零宽度无间断空间”的UTF-8编码是EF BB BF。因此,如果接收器接收到以EF BB BF开头的字节流,它将知道它是UTF-8编码。Windows使用BOM标记文本文件的编码方式。另外,unicode网站的FAQ-BOM详细介绍了BOM。官方自然权威,但在英语中,似乎相当费力。在UTF-8编码文件中,物料清单占用三个字节。如果用记事本将文本文件保存为UTF-8编码,可以用UE打开文件,切换到十六进制编辑状态,看到开头的FFFE。这是识别UTF 8编码文件的好方法。软件使用物料清单来识别该文件是否为UTF 8编码。很多软件也要求读入的文件必须有BOM。但是,仍然有很多软件无法识别BOM。当我学习火狐的时候,我知道在火狐的早期版本中,扩展不能有BOM,但是火狐1.5之后的版本已经支持BOM了。现在,PHP也不支持BOM。PHP在设计时没有考虑到BOM,也就是说不会忽略UTF-8编码文件开头BOM的三个字符。因为需要将-UTF-8转换为ASCII,或者在另存为中选择ASCII编码。如果是DOS格式的行尾字符,可以用记事本打开,点击另存为,选择ASCII编码。如果包含汉字,可以使用UE的另存为功能,选择无BOM的UTF-8。请参考下图:

根据博博的wiki,Editplus需要先保存为gb,再保存为UTF-8。但是,请小心,所有未包含在GBK编码中的字符都将丢失。如果文件中有一些非汉字,不要使用这种方法。(从这个小方面来说,UE——UltraEdite-32确实比Editplus好很多,edit plus太轻了。)另外,我找到了一种使用Wordpress提供的文件编辑器的方法。这种方法不受限制,不需要下载专门的编辑器。毕竟大家都在用Wordpress。在ftp中打开待编辑文件的写权限,然后进入Wordpress后台-管理-文件编辑器,输入待编辑文件的路径,点击编辑文件。在显示的编辑界面中,你看不到前三个字符,但没关系。将光标放在整个文件的第一个字符前面,然后按退格键。好了,点击更新文件,在ftp中刷新,可以看到文件小了3个字节,就大功告成了。最后,这是一个大问题。凡是想自己写插件,编辑别人的插件自己用,需要修改模板的(这篇文章估计大家都需要),最好了解以上知识,以免出现问题时不知所措。

版权声明:php读取csv文件后 uft8 bom导致页面显示问题的解决方案是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。