utf8编码的php导出CSV乱码怎么解决?

发布网友 发布时间:2024-12-14 22:21

我来回答

1个回答

热心网友 时间:2024-12-15 03:49

解决乱码的方法:首先使用iconv函数将utf8编码转码为GBK,语法为“$str = iconv('utf-8' 'GBK//IGNORE' $str));”。其次,在输出内容前先输出BOM头,这样Excel可自动识别到是UTF-8。其实需求是将数据导出到Excel,PHPExcel库虽然强大,但在内存使用上较为昂贵,对于超过10万的数据处理在web请求中较为困难。因此,使用原生PHP导出轻量的csv仍然是有需求的。

通常情况下,将UTF-8编码的内容导出到csv中,使用Excel打开会显示乱码,尤其是非主流字符或emoji表情。这是因为windows系统默认的Excel使用GBK编码解析。现今,编码通常都是使用UTF-8,除非是大公司知名产品为了节省流量而出有GBK等其他编码的版本。

解决乱码问题,通常使用PHP中的iconv函数进行转码为GBK,这样默认的Excel打开就不会有问题。但对于emoji表情等主流字符,GBK并不能显示,转码失败直接为空。可以添加//IGNORE标记进行忽略,这样只是忽略了它们,其他正常字符仍然能保留。

$str = iconv('utf-8' 'GBK//IGNORE' $str));

这可以说是一种折中方案。能否不转码直接输出UTF-8?Excel是否能自动识别UTF-8并使用UTF-8来解码显示?答案是可以的,只是需要一个BOM头(非windows系统中没有这个东西),有BOM头它就能识别到是UTF-8,否则会用默认的GBK处理,导致乱码。正确的输出BOM头如下:

$fp = fopen('/test_csv.csv' 'a');fwrite($fp,chr(0xEF).chr(0xBB).chr(0xBF)); //输出BOM头fputcsv($fp, ['标题']);fputcsv($fp, ['解决乱码']);fclose($fp);

以上测试结果证实,这种方法可以解决乱码问题,并正常显示emoji表情等非主流字符。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com