首頁 >後端開發 >PHP問題 >php 導入csv亂碼問題怎麼辦

php 導入csv亂碼問題怎麼辦

藏色散人
藏色散人原創
2022-11-21 09:32:431911瀏覽

php導入csv亂碼問題的解決方法:1、建構一個解析函數「function tb_str_getcsv($string, $delimiter=',', $enclosure='"') {...}」;2 、讀取檔案到變數;3、透過「substr($s,2)」去掉BOM頭即可。

php 導入csv亂碼問題怎麼辦

本教學操作環境: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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn