php導入csv亂碼問題的解決方法:1、建構一個解析函數「function tb_str_getcsv($string, $delimiter=',', $enclosure='"') {...}」;2 、讀取檔案到變數;3、透過「substr($s,2)」去掉BOM頭即可。
本教學操作環境:Windows7系統、PHP8.1版、Dell G3電腦。
php 導入csv亂碼問題怎麼辦?
解決php導入淘寶助理csv文件亂碼問題及解析
用php導入csv檔案很多時候會出現中文亂碼的狀況,特別是導入淘寶助理資料包,在網路上查了很多轉碼方法,都無法解決問題,這是什麼原因呢?
首先,淘寶助理導出的csv檔案為UTF-16LE編碼,很少見是吧。
#其次,它的csv檔案並非逗號分隔,而是\t分割。
透過如下程式碼,即可實作csv檔案解析功能
/** * 构造一个解析函数 * (php内置的str_getcsv不知为何会出现局部乱码,原因不详) */ function tb_str_getcsv($string, $delimiter=',', $enclosure='"') { $fp = fopen('php://temp/', 'r+'); fputs($fp, $string); rewind($fp); while($t = fgetcsv($fp, strlen($string), $delimiter, $enclosure)) { $r[] = $t; } if(count($r) ==1) return current($r); return $r; } $s = file_get_contents($path); //读取文件到变量 $s = iconv('UTF-16LE', 'utf-8', substr($s,2));//转码,substr($s,2)的作用是去掉 BOM 头 FFFE //有的第三方数据包很不规范,控制符没有用空双引号 //可能导致列数不对应,在此加上空双引号 $s = str_replace("\t\t", "\t\"\"\t", $s); $s = str_replace("\t\t", "\t\"\"\t", $s); $csv_data = tb_str_getcsv($s, "\t");//读取到数组
推薦學習:《PHP影片教學》
以上是php 導入csv亂碼問題怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!