2011-04-20 110 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));