2013年10月24日 星期四

PHP fgetcsv 讀 CSV 時,第一字元被刪掉或亂碼


我是讀取TXT檔案,PHP版本5.2.3

同事以 PHP Version 5.3.9 無此問題

重寫一個fgetcsv,或是TXT檔案自己補雙引號

http://blog.ezshow.org/2010/04/06/phpfgetcsv/





   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;
   }

沒有留言:

張貼留言