Heim >Backend-Entwicklung >PHP-Problem >Was soll ich tun, wenn die chinesischen Schriftzeichen verstümmelt sind, wenn PHP CSV liest?
php读取csv时中文乱码的解决办法:首先在导入csv的php脚本文件头部加上相应代码;然后使用【$row】进行转义,将中文编码读取出来;最后使用一个【fgetcsv()】方法的替代函数,防止php该函数自带着一些bug即可。
php读取csv时中文乱码的解决办法:
1、首先讲linux,不管是centos或者Ubuntu。在导入csv的php脚本文件头部加上如下代码:
setlocale(LC_ALL,array('zh_CN.gbk','zh_CN.gb2312','zh_CN.gb18030'));
这段代码的作用是改变脚本默认编码,因为操作系统的编码格式不是GBK所以,读取中文的时候会乱码。
2、接着讲windows,我们在读取csv数据的时候,会有一个while循环遍历每一行的数据,而读取的每一行数据,就需要我们进行转义,将中文编码读取出来。代码如下:
$row = eval('return '.iconv('gbk','utf-8',var_export($row,true)).';');
$row
,就是读取出来每一行的数据变量。
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; }
相关学习推荐: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!