• 技术文章 >后端开发 >PHP问题

    php读取csv时,读取中文乱码问题解决方法

    我叫mt我叫mt2019-10-15 17:55:13原创2417

    1、首先讲linux,不管是centos或者Ubuntu。在导入csv的php脚本文件头部加上如下代码:

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

    这段代码的作用是改变脚本默认编码,因为操作系统的编码格式不是GBK所以,读取中文的时候会乱码。

    1571123092(1).jpg

    2、接着讲windows,我们在读取csv数据的时候,会有一个while循环遍历每一行的数据,而读取的每一行数据,就需要我们进行转义,将中文编码读取出来。代码如下:

    $row = eval('return '.iconv('gbk','utf-8',var_export($row,true)).';');

    $row,就是读取出来每一行的数据变量。

    1571123121(1).jpg

    3、最后,贴一个fgetcsv()方法的替代函数,这种是针对有些老版本的php该函数自带着一些bug的情况。如果上边两点还是没办法解决您的问题,您可以尝试一下使用该函数,与前边两点配合使用。

    function fgetcsv_reg(& $handle, $length = null, $d = ',', $e = '"') {
       $d = preg_quote($d);
       $e = preg_quote($e);
       $_line = "";
       $eof=false;
       while ($eof != true) {
           $_line .= (empty ($length) ? fgets($handle) : fgets($handle, $length));
           $itemcnt = preg_match_all('/' . $e . '/', $_line, $dummy);
           if ($itemcnt % 2 == 0)
               $eof = true;
       }
       $_csv_line = preg_replace('/(?: |[ ])?$/', $d, trim($_line));
       $_csv_pattern = '/(' . $e . '[^' . $e . ']*(?:' . $e . $e . '[^' . $e . ']*)*' . $e . '|[^' . $d . ']*)' . $d . '/';
       preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
       $_csv_data = $_csv_matches[1];
       for ($_csv_i = 0; $_csv_i < count($_csv_data); $_csv_i++) {
           $_csv_data[$_csv_i] = preg_replace('/^' . $e . '(.*)' . $e . '$/s', '$1', $_csv_data[$_csv_i]);
           $_csv_data[$_csv_i] = str_replace($e . $e, $e, $_csv_data[$_csv_i]);
       }
       return empty ($_line) ? false : $_csv_data;
    }

    1571123166(1).jpg

    推荐教程:PHP视频教程

    以上就是php读取csv时,读取中文乱码问题解决方法的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:php csv 中文乱码
    上一篇:php定义变量几种 下一篇:php读文件快还是数据库
    PHP编程就业班

    相关文章推荐

    • 如何使用PHP处理CSV文件?(代码示例)• 如何使用PHP创建CSV文件?(代码示例)• csv是什么意思• php输出csv乱码怎么解决

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网