Solution to the garbled problem of php importing csv: 1. Construct a parsing function "function tb_str_getcsv($string, $delimiter=',', $enclosure='"') {...}"; 2 , read the file into the variable; 3. Remove the BOM header through "substr($s,2)".
The operating environment of this tutorial: Windows7 system , PHP version 8.1, Dell G3 computer.
What should I do if php imports garbled csv files?
Solving the garbled problem of php importing Taobao Assistant csv files and analysis
Using PHP to import csv files will often cause Chinese garbled characters, especially when importing Taobao Assistant data packages. I have checked many transcoding methods on the Internet, but none of them can solve the problem. What is the reason?
First of all, the csv file exported by Taobao Assistant is UTF-16LE encoded, which is rare, right?
Secondly, its csv file is not comma separated, but \t separated.
Pass The following code can realize the csv file parsing function
/** * 构造一个解析函数 * (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");//读取到数组
Recommended learning: "PHP Video Tutorial"
The above is the detailed content of What to do if php imports csv garbled characters?. For more information, please follow other related articles on the PHP Chinese website!