fgetcsv()读取excel文件内容


$file_path ../excel/excel50000.xlsx';        //文件路径
$handle = fopen( $file_path, 'r' );
 while(( $data = fgetcsv( $handle, 3000, ',' ) ) !== false){
        $data = eval('return '.iconv('gbk','utf-8',var_export($data,true)).';');
        dd($data);
 }

img

使用fgetcsv()读取excel的内容,一直是乱码,使用iconv转码也无效
还请各位能指点一二

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答来自chatgpt:

    我可以尝试解决该问题。

    第一步,确认读取文件的编码格式是否正确,如果文件在Windows环境中生成,可能是ANSI编码,需要先将其转换为UTF-8编码。

    示例代码:

    $file = 'test.csv';
    if (file_exists($file)) {
      $data = file_get_contents($file);
      $data = mb_convert_encoding($data, 'UTF-8', 'GBK');
      // 此处将ANSI编码转换为UTF-8编码
      $rows = explode("\n", $data);
      foreach ($rows as $row) {
        $cols = str_getcsv($row);
        // 处理每一行的数据
      }
    }
    

    第二步,将读取到的数据进行转码,这里使用iconv函数进行转码。

    示例代码:

    $file = 'test.csv';
    if (file_exists($file)) {
      $handle = fopen($file, 'r');
      while (!feof($handle)) {
        $row = fgetcsv($handle);
        if (is_array($row)) {
          foreach ($row as $key => $value) {
            $row[$key] = iconv('GBK', 'UTF-8', $value);
          }
          // 处理每一行的数据
          print_r($row);
        }
      }
      fclose($handle);
    }
    

    以上是解决该问题的两种方法,在使用fgetcsv函数读取excel文件时可能会遇到的乱码问题,如果还存在其他问题可以进一步调试或使用其他方法解决。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^