2011-11-28 110 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()來讀取輸入流,你應該沒問題)。