如何解决 PHP 用 fgetcsv 读取 csv 中文字符为乱码的问题?

 廖赞胜 发布于 2022-12-01 19:44

csv 是在 windows 下转换的,保存的代码也是 utf8 的,但是读取的时候,中文全部是乱码,如果 excel 是在 mac 下用 number 转换的 csv(utf8),读取就是正常的。 程序是运行在 centos 7 下面的。

1 个回答
  • 乱码是由于系统或软件缺乏对某种字符编码的支持,而产生的不能正常阅读的混乱字符。下面小编要给大家讲述的是php使用fgetcsv读取csv文件出现乱码应对策略,欢迎阅读。

      一般来说在php中碰到乱码多半是编码问题,在这里我们实例分析了fgetcsv读取csv文件乱码原因所在与解决方法。

      例子如下:

      代码如下:

      function get_csv_contents( $file_target ){

      $handle  = fopen( $file_target, 'r');

      while ($data = fgetcsv($handle, 1000, ",")) {

      $num = count($data);

      echo "<p> $num fields in line $row: <br>n";

      $row++;

      for ($c=0; $c < $num; $c++) {

      echo $data[$c]. "<br>n";;

      /echo getUTFString($data[$c])/

      }

      }

      fclose($handle);

      }

      导入的csv文件是以ansi编码保存的,对于中文操作系统环境对应的应该就是gbk编码了,通过手动更改浏览器字符编码为gbk,乱码的情况消失了,于时进行了下面调整。

      代码如下:

      $data = eval('return '.iconv('gbk','utf8',var_export($data,true)).';');

      $data为需要转换编码的数组。

      补充:LINUX FGETCSV读取GBK数据乱码

      当Linux系统是使用的默认设置,则在该Linux服务器上对gbk的csv格式文件进行处理的时候,就会出现乱码现象。

      解决方法是:

      使用 setlocale 函数设置环境变量。比如要设置使用gb 的区域设置可以在fgetcsv前使用下面的语句。

      代码如下:

      setlocale(LC_ALL,array('zh_CN.gbk','zh_CN.gb2312','zh_CN.gb18030'));

      具体使用哪些locale 可以使用linux 命令 locale a 查看系统支持哪些

    2022-12-01 22:38 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有