解析格式错误的CSV文件

时间:2011-11-28 22:44:58

标签: php csv

如何在PHP中解析像这样的CSV(value 8附近有双引号)?

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

我尝试了fgetscv($pointer, 4096, ';', '"');

3 个答案:

答案 0 :(得分:0)

是。注意额外的报价。

  

“value 8”“;

答案 1 :(得分:0)

从前一行开始,您的数据似乎格式不正确。你有一个没有收盘报价的开盘报价。

答案 2 :(得分: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()来读取输入流,你应该没问题。)