2014年11月27日 星期四

PHP fgetcsv, str_getcsv 中文問題

在 OpenShift 上使用 str_getcsv 時中文會有問題,檔案爲 UTF-8 編碼,locale 爲 zh_TW.UTF-8

PHP 4 使用 fgetcsv
PHP 5 使用 str_getcsv

確定可用代碼 :
 function __fgetcsv(& $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;
 }




References :
linux下,fgetcsv乱码问题 - Alian的专栏 - 博客频道 - CSDN.NET
萬隆小站 • 檢視主題 - [php]fgetcsv 讀入檔案無「「」時,第一字元被刪掉亂碼
[php]UTF-8的fgetcsv函數 @ 清新下午茶 :: 痞客邦 PIXNET ::

沒有留言:

張貼留言