2013-10-01 71 views
0

我有以下csv文件:PHP fgetcsv - 檢測記錄太多

"Id","Title","Body","Tags" 
"101","this title"," 
\"">.</>""; 
","c# asp.net excel table" 

,我想轉換成一個數組如下:

Array 
(
    [0] => Array 
     (
      [0] => Id 
      [1] => Title 
      [2] => Body 
      [3] => Tags 
     ) 

    [1] => Array 
     (
      [0] => 101 
      [1] => this title 
      [2] => \"">.</>""; 
      [3] => c# asp.net excel table 
     ) 
) 

我的代碼是:

while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 
    $num = count($data); 

    for ($c=0; $c < $num; $c++) { 
     $data[$c] = strip_tags($data[$c]); 
    } 

    $result[$row] = $data; 
    $row++; 
} 
fclose($handle); 
return $result; 

我的問題是我收到以下數組:

Array 
(
    [0] => Array 
     (
      [0] => Id 
      [1] => Title 
      [2] => Body 
      [3] => Tags 
     ) 

    [1] => Array 
     (
      [0] => 101 
      [1] => this title 
      [2] => 
\">.</>""; 
     ) 

    [2] => Array 
     (
      [0] => ,c# asp.net excel table" 
     ) 

) 

一般來說,當字段中存在潛在的代碼(這是一個StackOverflow數據轉儲,因此一些文本字段具有各種編程代碼)時,如何避免檢測到太多的recors。

回答

1

此字符串不正確轉義:

" 
\""&gt;.&lt;/&gt;""; 
" 

所有報價字符必須有反斜槓他們(或其他字符轉義之前,你已經傳遞到適當的PARAM 你should't傳遞0和逗號。到fgetcsv,他們已經默認:http://php.net/fgetcsv

+0

所以解決方法是搜索所有引號字符,並添加反斜槓,除非它匹配我的正確的行分隔符(「,」)? – tucson

1

嘗試使用CSVed,以確保它是正確的格式爲CSV打開文件

如果CSV壞了,然後你。可以對解析結果做一些快速修復。例如:

while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 
    $num = count($data); 

    for ($c=0; $c < $num; $c++) { 
     $data[$c] = strip_tags($data[$c]); 
    } 

    if (count($data) == 3) { 
     $data[1][2] .= $data[2].[0]; 
     unset($data[2]); 
    } 

    $result[$row] = $data; 
    $row++; 
} 
fclose($handle); 
return $result; 
+0

感謝您的提示。 CSVed在解析數據時也存在問題,並且檢測到很多錯誤。我不知道下一步該怎麼做... – tucson

+1

嘗試修復解析結果。這將是個案。 –