【发布时间】:2015-06-08 15:59:34
【问题描述】:
如果我有 test.csv 例如:
"column1", "column2", "this "is" column3", "column4"\r\n
这使用 PHP fgetcsv 分成 5 列。有没有办法处理未转义的引号以返回 4 列?
if (($handle = fopen("test.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
print_r($data);
}
}
【问题讨论】:
-
你的 CSV 文件来自哪里?您应该有一对双引号来表示嵌入的双引号:
"column2", "this ""is"" column3", "column4"。 -
你可能会使用一个正则表达式(preg_replace)来测试一个引号是否在逗号之前或之后,如果没有找到,则“转义”它......不是一个完美的解决方案,你'd 需要使用 fgets(),检查和转义,然后是 str_getcsv() 而不是更简单的 fgetcsv()
-
外部数据源大约有 200 万条记录,因此有些有限。
-
嗯,PHP 中没有内置的灵丹妙药,可以让它自动处理无效的 CSV 文件,您要么在将其解析为 CSV 之前修复它,要么在让 PHP 访问文件之前修复它