Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn die chinesischen Schriftzeichen verstümmelt sind, wenn PHP CSV liest?

Was soll ich tun, wenn die chinesischen Schriftzeichen verstümmelt sind, wenn PHP CSV liest?

coldplay.xixi
coldplay.xixiOriginal
2020-07-10 10:43:103799Durchsuche

php读取csv时中文乱码的解决办法:首先在导入csv的php脚本文件头部加上相应代码;然后使用【$row】进行转义,将中文编码读取出来;最后使用一个【fgetcsv()】方法的替代函数,防止php该函数自带着一些bug即可。

Was soll ich tun, wenn die chinesischen Schriftzeichen verstümmelt sind, wenn PHP CSV liest?

php读取csv时中文乱码的解决办法:

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

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

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

Was soll ich tun, wenn die chinesischen Schriftzeichen verstümmelt sind, wenn PHP CSV liest?

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

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

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

Was soll ich tun, wenn die chinesischen Schriftzeichen verstümmelt sind, wenn PHP CSV liest?

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(&#39;/^&#39; . $e . &#39;(.*)&#39; . $e . &#39;$/s&#39;, &#39;$1&#39;, $_csv_data[$_csv_i]);
       $_csv_data[$_csv_i] = str_replace($e . $e, $e, $_csv_data[$_csv_i]);
   }
   return empty ($_line) ? false : $_csv_data;
}

Was soll ich tun, wenn die chinesischen Schriftzeichen verstümmelt sind, wenn PHP CSV liest?

相关学习推荐:PHP编程从入门到精通

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn die chinesischen Schriftzeichen verstümmelt sind, wenn PHP CSV liest?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

In Verbindung stehende Artikel

Mehr sehen