在處理csv文件導入時關於fgetcsv獲取中文亂碼問題.. 因為項目采用utf-8編碼, 而導入的csv文件是以ansi編碼保存的 輸出中文亂碼問題.
下面為找到的解決方法原文.
今天在處理csv文件導入的時候,通過fgetcsv方法返回的數組中,值為漢字的部分全是亂碼。我分析是因為項目的文件全部以utf-8編碼,而
導入的csv文件是以ansi編碼保存的,對於中文操作系統環境對應的應該就是gbk編碼了,通過手動更改瀏覽器字符編碼為gbk,亂碼的情況消失了。於
是決定對數組進行編碼轉換。
系統默認的編碼轉換函數iconv只能接受字符串參數,當然我們可以通過array_walk……等數組方法利用回調函數遞歸的來進行處理,也可以
直接讀取數組單元處理后再填入數組。但是感覺數組如果很龐大或者維數過多,性能上的比較就不得不考慮了。正因為iconv函數只能接受字符串參數,於是想
到將數組先利用函數serialize序列化,通過iconv轉換編碼后再用unserialize反序列化回來。但不知道為什么轉換編碼后無法反序列化
回來,找個時間單獨實驗一下,清楚的朋友給我留個言也好。
於是求助其他Variable handling
函數。在這里var_export函數可以輸出或返回一個變量的字符串表示。此函數返回關於傳遞給該函數的變量的結構信息,它和 var_dump()
類似,不同的是其返回的表示是合法的 PHP 代碼。可以通過將函數的第二個參數設置為 TRUE,從而返回變量的表示。下面就利用這一特性將數組轉化為字符串然后再iconv接着再用eval函數將其還原為數組。這次結果正確顯示了。
$data = eval('return '.iconv('gbk','utf-8',var_export($data,true)).';');
$data為需要轉換編碼的數組。