PHP使用多字符分隔符解析csv

PHP使用多字符分隔符解析csv,php,csv,Php,Csv,我们正在尝试解析包含多字符分隔符的csv文件。文件如下: foo;bar bar;"foo foo" "foo;foo";bar while ($row = fgetcsv($file, 1000, ';'. '"')) { $data[] = $row; } 。。。下面是我们试图用来解析文件的逻辑: foo;bar bar;"foo foo" "foo;foo";bar while ($row = fgetcsv($file, 1000, ';'.

我们正在尝试解析包含多字符分隔符的csv文件。文件如下:

foo;bar
bar;"foo
foo"
"foo;foo";bar
    while ($row = fgetcsv($file, 1000, ';'. '"')) {
        $data[] = $row;
    }
。。。下面是我们试图用来解析文件的逻辑:

foo;bar
bar;"foo
foo"
"foo;foo";bar
    while ($row = fgetcsv($file, 1000, ';'. '"')) {
        $data[] = $row;
    }
问题是,当我们运行逻辑时,我们会得到一个异常,表明

fgetcsv():分隔符必须是单个字符


是否可以设置标志值或ini值以允许使用多字符分隔符?

我与同事讨论了代码。事实证明,连接点实际上应该是一个逗号

那么,您的分隔符是什么呢;“还是
?您确定这些是多字符分隔符吗?通过看它,第2行和第3行实际上是同一行,它只是在值2的中间有一个新的行字符。第4行是两个值,第一个是带分号的字符串。通过这样看,您有3行,每个行有2个值,以及一个可解析的CSV;作为分隔符。
是分隔符,
是文本框,因此
之间的
不被视为分隔符。只要使用
。我觉得那个文件有点不可靠。逻辑是什么?在第一行中,
清楚地界定了这两条记录……在第二行中,你可以说
在界定记录时加入了
。但这不适用于第三行或第四行-在第三行中,
本身就是,因此打破了模式。在第4行,
出现在开头,这再次意味着它不能是该实例中的分隔符。通常在CSV中只有一个分隔符字符,而且通常是
用于将恰好包含分隔符字符的字段作为数据本身的有效部分括起来。但是,在这种情况下,可能会出现问题-您确定第2行和第3行实际上不是一行
栏;“foo foo”
?我怀疑可能是一个鬼鬼祟祟的换行符潜入了第2行,将最后一个字段的一部分推到了下一行,从而破坏了文件。在文本编辑器(如记事本+)中检查它,它可以显示隐藏的字符并检查那里发生了什么。我看不出还有什么别的办法有什么意义。当您仔细查看数据时,认为它是一个多字符分隔符的建议就会消失。。。什么点?上面的例子中没有点。CSV文件实际上不需要使用逗号——几乎任何东西都可以用作分隔符,包括
。不常见的是多分隔符,您错误地将其标识为在示例数据中使用,我们已经在上面的评论中向您解释了这一点,您根本没有对该问题做出任何回应。你有没有像我建议的那样寻找新词?无论如何,老实说,我看不出这个答案与你的问题或样本数据有什么关系。你能澄清一下吗?如果仔细看,代码示例中确实有一个点。它被用来(错误地)连接两个字符串——分号字符串和双引号字符串。将该点改为逗号可以修复这种情况,允许我们使用分号作为分隔符(这是我同事的初衷)。这不是我的代码——我只是从某人那里接手的,那家伙做了一个很容易纠正的诚实的打字错误。哦,我明白你的意思是代码中没有数据,抱歉,我误读了。我仍然认为你的CSV有可能被损坏,尽管在第2行和第3行