2011-04-20 23 views
5

鑑於CSV數據下面的字符串(我不能保證場均以)任何修剪空白的PHP fgetcsv錯誤的解決方法?

AB,CD, EF,GH, IJ 

的PHP代碼:

$arr = fgetcsv($f); 

(假設$ f是一個有效的文件指針讀數包含上述文本)的文件 - 人們所期望的結果如下:

​​

的時候,其實你:

Array('AB', 'CD', 'EF', 'GH', 'IJ'); 

如果您需要該字段中的位置上下文,則會出現問題。

任何變通辦法仍然能夠利用fgetcsv,但確保空白不會丟失?

該錯誤是在這裏報道:http://bugs.php.net/bug.php?id=53848

+0

這是我這個消息。 PHP的行爲幾乎是我所期望的。無論如何,你可以使用'explode(「,」,$ line)',因爲這實際上就是你想要的。 – mario 2011-04-20 22:37:05

+0

@mario:但這在任何情況下都不起作用。 – 2011-04-20 22:41:03

+0

@mario:我想盡可能利用fgetcsv,尤其是帶引號的字段(如果可用)。 – drowe 2011-04-20 22:48:25

回答

6

Oooops。小號**噸。
我無意中已經寫它不會刪除空格的功能:

function str_getcsv2($line, $del=",", $q='"', $esc="\\") { 
    $line = rtrim($line, "\r\n"); 
    preg_match_all("/\G ([^$q$del]*) $del | $q(([$esc$esc][$q]|[^$q]*)+)$q $del /xms", "$line,", $r); 
    foreach ($r[1] as $i=>$v) { // merge both captures 
     if (empty($v) && strlen($r[2][$i])) { 
      $r[1][$i] = str_replace("$esc$q", "$q", $r[2][$i]); // remove escape character 
     } 
    } 
    return($r[1]); 
} 

使用方法如下:

$arr = str_getcsv2(fgets($f));