首先,淘宝助理导出的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");//读取到数组
亲测此段代码可以完美解析淘宝助理5.5导出的csv文件