给定以下CSV数据字符串(我无法确保字段被引用)
AB,CD, EF,GH, IJ
和PHP代码:
$arr = fgetcsv($f);
(假设$f是一个有效的文件指针,读取包含上述文本的文件)-人们会期望得到这个结果:
Array('AB', 'CD', ' EF', 'GH', ' IJ');
,而实际上你得到:
Array('AB', 'CD', 'EF', 'GH', 'IJ');
如果您需要该字段中的位置上下文,则会出现问题。
任何解决方法仍然能够利用fgetcsv,但确保空白不丢失?
这个bug报告在这里:http://bugs.php.net/bug.php?id=53848
哎呀。S * * t。
我不小心已经写了一个不去掉空格的函数:
function str_getcsv2($line, $del=",", $q='"', $esc="\") {
$line = rtrim($line, "rn");
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));