php fgetcsv读取数据不全

2019-09-27  本文已影响0人  韩小禹

php 的fgetcsv函数读取csv文件,如果都是中文且数据很多,会导致读取数据不全的问题,下面函数是网上找的一个解决方法。

public 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; 
    } 
上一篇下一篇

猜你喜欢

热点阅读