作者tyc5116 (累人啊....)
看板PHP
标题Re: [请益] strpos会抓错位置?
时间Fri Mar 2 13:56:25 2012
: → tyc5116:反正从csv读进来的资料,一样,第一笔结果会是错的 03/02 00:09
: → tyc5116:如果csv的资料第一行空白,结果都是对的,好奇怪 03/02 00:10
: 推 chrisQQ:第一笔前面可能有BOM,你用 hex editor 打开来看就知道了 03/02 00:32
: → chrisQQ:或是有其他神秘的 header 在那 03/02 00:33
: → tyc5116:看了一下,真的有没错,可是我该怎麽避免掉这个情况 03/02 07:55
: → tyc5116:主要是php,mysql,excel间的处理excel的资料要写入mysql 03/02 07:56
: → tyc5116:先不考虑板上说的phpexcel好了,因为我的表格并不复杂XD 03/02 07:57
: → tyf99:第一行空下来? 03/02 08:07
: → mervynW:trim试试看 03/02 10:18
测了一阵子,发现为什麽会有这样的问题了,但还没完美的解决方式
首先,excel内将档案存成csv档,这时编码是ansi,这时用hex editor看是正常的
然後我再用记事本(NotePad)开启,再另存新档,这时将其编码存成UTF-8
(不然网页打开会是乱码),再用hex editor开来看
发现第一笔的资料前面多了三个字元,分别是KF BB BF(hex),把它删掉结果就OK了
但请问我这样操作的方式是正常的吗?或是还有其它方式?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 111.251.163.108
1F:推 LaPass:BOM? = = 03/02 13:58
2F:→ tyc5116:? 03/02 14:09
3F:→ knives:BOM +1 03/02 14:47
4F:→ mervynW:BOM ... ... 03/02 15:20
5F:→ chrisQQ:如果你的流程不变,那就是每个档案读进来先把前3bytes干掉 03/02 16:33
6F:→ chrisQQ:在丢去你的程式,这样最快最方便 XD 只要加一行。 03/02 16:33
7F:→ chrisQQ:或是改用 notepad++ 等等其他能够存不含BOM utf8 的editor 03/02 16:34
8F:→ tyc5116:爬文後知道了BOM这东西,不过它固定占前三个byte吗? 03/02 22:45
9F:→ chrisQQ:yes 03/02 23:22
10F:→ buganini:if(substr($s,0,3)=="\xEF\xBB\xBF") $s=substr($s,3;) 03/03 01:28
11F:→ buganini:这样不管有没有bom,只要是UTF-8都没问题 03/03 01:29
12F:→ buganini:不过基本上还是确保来源txt没有bom最完美 03/03 01:29
13F:→ knives:我印象中可以用header去处理掉,可是正解应该还是用编辑器 03/03 04:59
14F:→ knives:存成不含bom的utf8档,除非你的这支程式要给吃bom的程式读 03/03 05:00