loading
Please wait while loading...
返回 解決 fgetcsv 中文亂碼的問題
今天用 fgetcsv 進行文件匯入時, 發現某些文字是出現亂碼, 而如果將文件內容直接輸出是沒有此問題的, 原因明顯不過就是 fgetcsv 出的問題了, 在網上搜尋解決方案, 找到了以下的 function, 是有人重寫 fgetcsv 制作出來的, 我就直接把它改了名字, 不跟原本的 fgetcsv 重覆了, 使用此 function 果然解決了亂碼問題
function ffgetcsv(&$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;
}
Comments
comments powered by Disqus