PHP有a function for converting CSV strings to PHP arrays,但不是函数,反之亦然,所以我写了一篇:
function echocsv(array $arr, $quo = '"', $sep = ',') {
$escape = $quo . $quo;
foreach($arr as &$val) {
if(strpos($val, $quo) !== false) {
$val = $quo . str_replace($quo, $escape, $val) . $quo;
}
}
echo implode($sep, $arr) . PHP_EOL;
}
有什么我可以忽略的吗?从wikipedia它基本上说引号应该用另一个引号转义,而这几乎就是它的全部内容。 .CSV文件需要在MS Excel中打开。
我的原始测试似乎表明它正在发挥作用。
(我正在回应它,而不是返回一个字符串,因为我要将它直接传输到浏览器)
答案 0 :(得分:7)
$stdout = fopen('php://output','w'); // 'stdout' is for CLI, 'output' is for Browser
fputcsv($stdout, array('val,ue1','val"ue2','value3','etc'));
fflush($stdout); // flush for fun :)
fclose($stdout);
^ 将CSV输出到浏览器。
答案 1 :(得分:6)
PHP确实包含您需要的功能:fputcsv()
要流式传输到浏览器,请使用stdout作为“文件”:
$stdout = fopen('php://stdout','w');
fputcsv($stdout, array('val,ue1','val"ue2','value3','etc'));
fclose($stdout);
答案 2 :(得分:3)
您还需要检查$val
是否包含$sep
(即如果字符串包含逗号,则引用该字符串):
if (strpos($val, $quo) !== false || strpos($val, $sep) !== false) {
...
}
否则,fputcsv()
将完成工作(但仅限于文件/流)。