我需要使用
PHP将CSV文件中的所有字符串和数字双引号括起来.
我正在使用此代码生成CSV – 我正在使用codeigniter框架
$array = array( array( (string)'XXX XX XX',(string)'3',(string)'68878353',(string)'',(string)'xxxx@xxxx.xxx.xx',),); $this->load->helper('csv'); array_to_csv($array,'blueform.csv');
输出我得到:
"XXX XX XX",3,68878353,xxxx@xxxx.xxx.xx
预期产量:
"XXX XX XX","3","68878353","","xxxx@xxxx.xxx.xx"
array_to_csv的代码
if (!function_exists('array_to_csv')) { function array_to_csv($array,$download = "") { if ($download != "") { header('Content-Type: application/csv'); header('Content-Disposition: attachement; filename="' . $download . '"'); } ob_start(); $f = fopen('PHP://output','w') or show_error("Can't open PHP://output"); $n = 0; foreach ($array as $line) { $n++; if (!fputcsv($f,$line)) { show_error("Can't write line $n: $line"); } } fclose($f) or show_error("Can't close PHP://output"); $str = ob_get_contents(); ob_end_clean(); if ($download == "") { return $str; } else { echo $str; } } }
先谢谢你
在PHP中构建CSV时,您应该使用PHP 5中提供的
fputcsv函数
从文档中可以看到以下参数:
int fputcsv ( resource $handle,array $fields [,string $delimiter = "," [,string $enclosure = '"' [,string $escape_char = "\" ]]] )
你有:
>您正在写的文件资源
>将数据放入CSV
>分隔符(通常为逗号)
>字符串外壳(这是你想要的引号)
>转义字符串(因此,如果您的数据包含机箱字符,则可以将其转义为避免看起来像新字段)
作为默认值,对于分隔符和“对于机箱,您不需要添加更多,这将正确地覆盖字符串.数字是一个不同的事情.有一个工作在this SO question,我发现后输入大部分内容,然后再出现数字问题:
Not happy with this solution but it is what I did and worked. The idea
is to set an empty char as enclosure character on fputcsv and add some
quotes on every element of your array.06001