作者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