php读取csv时中文乱码怎么办?-PHP问题

资源魔 39 0

php读取csv时中文乱码的处理方法:起首正在导入csv的php剧本文件头部加之相应代码;而后应用【$row】进行本义,将中文编码读掏出来;最初应用一个【fgetcsv()】办法的代替函数,避免php该函数自带着一些bug便可。

php读取csv时中文乱码的处理方法:

一、起首讲linux,不论是centos或许Ubuntu。正在导入csv的php剧本文件头部加之以下代码:

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

这段代码的作用是扭转剧本默许编码,由于操作零碎的编码格局没有是GBK以是,读取中文的时分会乱码。

49c09ca4662002be21bfd8b781a4867.png

二、接着讲windows,咱们正在读取csv数据的时分,会有一个while轮回遍历每一一行的数据,而读取的每一一行数据,就需求咱们进行本义,将中文编码读掏出来。代码以下:

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

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

9d5a8c57d5b9e830c3a25789c0a6008.png

三、最初,贴一个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, $du妹妹y);
       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;
}

496ade1d4ee472a66ecde4c9574caf3.png

相干学习保举:PHP编程从入门到通晓

以上就是php读取csv时中文乱码怎样办?的具体内容,更多请存眷资源魔其它相干文章!

标签: php php教程 php故障解决 php使用问题 csv

抱歉,评论功能暂时关闭!