2011-11-28 81 views
0

如何在PHP中解析像这样的CSV(在value 8附近有双引号)?解析格式错误的CSV文件

 
"03720108";"value 8"";"";"219";"03720108";"value";"value";"value";"";"";"";"";"";"";"value";"";"";"value";"value"; 

我试着用fgetscv($pointer, 4096, ';', '"');

+3

你自己用'价值8'附近有一个双引号' – webbiedave

+0

来回答它,所以我是对的:(那个额外的引号是邪恶的, – razorxan

回答

0

是。注意额外的报价。

“值8”“;

0

你的数据似乎开始于前行,您有没有结束引号开口报价被畸形

+0

是更具体的编辑:只有一行 – razorxan

+0

我正在查看你的原来的版本在@ Macmade的编辑之前,它似乎有两行 – phatfingers

+0

我的不好!不能使用这个s ** t – razorxan

0

你可能仍然能够。解析这个字符串,虽然:

$str = '"03720108";"value 8"";"";"219";"03720108";"value";"value";"value";"";"";"";"";"";"";"value";"";"";"value";"value";'; 

$parsed = array_map(
    function($str) { return substr($str, 1, -1); }, 
    explode(';', $str) 
); 

var_export($parsed); 
/* 
    array (
    0 => '03720108', 
    1 => 'value 8"', 
    2 => '', 
    3 => '219', 
    4 => '03720108', 
    5 => 'value', 
    6 => 'value', 
    7 => 'value', 
    8 => '', 
    9 => '', 
    10 => '', 
    11 => '', 
    12 => '', 
    13 => '', 
    14 => 'value', 
    15 => '', 
    16 => '', 
    17 => 'value', 
    18 => 'value', 
    19 => false, 
) 
*/ 

事情变得更加复杂一点,不过,如果有包含;字符元素(正常通过将引号中的值加上引号将它们转义出来......),上面的代码假设你只需要解析一行代码(尽管如果你使用fgets()来读取输入流,你应该没问题)。