我有一个CSV字符串文件,如下所示:
"12345","445 Maple St.","Going to the "orange" store","610-123-4567"
我正在使用以下内容解析每一行:
while (($data = fgetcsv($file_matters, 500, ',', '"', '"')) !== FALSE)
而不是像这样得到一个数组:
array(4) (
[0] => (string) 12345
[1] => (string) 445 Maple St.
[2] => (string) Going to the "orange" store
[3] => (string) 610-123-4567
)
我得到了:
array(4) (
[0] => (string) 12345
[1] => (string) 445 Maple St.
[2] => (string) Going to the orange" store"
[3] => (string) 610-123-4567
)
请注意不正确的双引号。它们应像"orange"
一样缠绕在橙色上,但正如你所看到的,它们不是。我正在使用fgetcsv
的第五个参数,它应该自动转义双引号。有什么想法吗?
答案 0 :(得分:2)
我不确定您的CSV实际上是否有效;例如,这将是有效的:
"12345","445 Maple St.",Going to the "orange" store,"610-123-4567"
您的摘录无效,因为"
内有"
。
CSV NOT 要求所有字段都用引号括起来,PHP也可以处理带有不带引号的块的CSV行。
php > var_dump(
> str_getcsv('"12345","445 Maple St.",Going to the "orange" store,"610-123-4567"')
> );
array(4) {
[0]=>
string(5) "12345"
[1]=>
string(13) "445 Maple St."
[2]=>
string(27) "Going to the "orange" store"
[3]=>
string(12) "610-123-4567"
}
答案 1 :(得分:1)
您只需从csv文件中获取数据并使用(,)。然后使用trim()函数删除双引号,如下所示。我希望,我解决了你的问题。
Book1.csv
"12345","445 Maple St.","Going to the "orange" store","610-123-4567"
,代码是
<?php
$row = 1;
$handle = fopen("Book1.csv", "r");
while (($data = fgetcsv($file_matters,500, ",")) !== FALSE) {
$num = count($data);
$row++;
for ($i=0; $i < $num; $i++) {
$hh=$data[$i];
$a[]=trim($hh,'"') ;// remove "" and save in a array
// $a=trim($hh,'"') ;
//echo$a. "<br />\n";
}
}
fclose($file_matters);
print_r($a);
?>
结果
Array ( [0] => 12345
[1] => 445 Maple St.
[2] => Going to the "orange" store
[3] => 610-123-4567 )
答案 2 :(得分:0)
在CSV中,您需要转义内容。
$csvContent = str_replace(' "', ' \"', $csvContent);
$csvContent = str_replace('" ', '\" ', $csvContent);