PHP在处理csv在数据导入导出方面,要比.xls高效很多。

实现一上传csv文件导入功能时,遇到上传文件编码不是UTF-8的情况,导致读取的数据乱码。如果csv文件是utf-8文件,可能导致excel不能正常识别,所以就遇到的问题。

搜索后发现mb_detect_encoding可以检测字符串编码,不一定百分百识别,至少能满足我的需求

代码片断:

            $tmp_row = array();
            foreach ($csv_val as $k => $v) {
                $row_value = ltrim($row[$k], '`');
                $encode = mb_detect_encoding($row_value, array("UTF-8", "GB2312", "CP936", "GBK"));
                if( $encode!="UTF-8" ){
                    $tmp_row[$v] = trim(iconv($encode,'UTF-8', $row_value));
                }else{
                    $tmp_row[$v] = trim($row_value);
                }
            }
            $data[] = $tmp_row;