需要将包含/逗号的字符串正确导出到CSV文件中

时间:2009-04-21 00:43:25

标签: php mysql csv

编辑:将错误的功能部分复制到此问题中,以下是适当的部分。

$values = mysql_query("SELECT lname, fname, email, dtelephone, etelephone, contactwhen, thursday, 
friday, saturday, sunday, monday, comments FROM volunteers_2009 WHERE venue_id = $venue_id");

while ($rowr = mysql_fetch_row($values)) {
    for ($j=0;$j<$i;$j++) {
        $csv_output .= $rowr[$j].", ";
    }
    $csv_output .= "\n";
}

我的评论中可能有逗号,甚至是双引号,当它在注释字段中有逗号时,会抛出整个csv文件。

下面的代码是如何将数据加载到csv字符串中,放入csv文件中。

如何正确导出评论字段数据?

6 个答案:

答案 0 :(得分:10)

你应该看看fputcsv()。那里也有一些有用的评论。

int fputcsv ( resource $handle , array $fields [, string $delimiter = ',' 
    [, string $enclosure = '"' ]] )
     

fputcsv()格式化一行(已通过   作为字段数组)作为CSV并将其写入(以换行符终止)   指定的文件句柄。

答案 1 :(得分:6)

用双引号括起该字段。加倍任何嵌入的双引号。

ordinary field,"field with , in it","field with double double quote ("""")"

请注意,这与问题Dealing with commas in a CSV file

非常非常接近

答案 2 :(得分:1)

Umn,为什么不使用内置的mySQL命令?如果我错过了什么,请忽略,但我认为这是最快的路线:

http://www.netreveal.com/ddalton/2006/08/how_to_export_mysql_to_csv.html

网站基本上建议:

SELECT <fields or *> INTO OUTFILE '/tmp/result.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM <table> WHERE <condition> 

答案 3 :(得分:0)

编辑:我的不好,我刚刚测试了它并且它不起作用 - 至少在Excel中没有。

您可以用其他内容替换逗号:

$field = str_replace(',','#COMMA#',$row['Field']);
$csv_output .= $field.', '; 

答案 4 :(得分:0)

您可以使用不同的分隔符,例如“|”或“@”或其他一些不太可能出现在数据中的字符。

大多数csv软件都能够读取“csv”文件,该文件使用逗号之外的其他内容作为分隔符。

答案 5 :(得分:0)

导出数据时,保留数据中的逗号和双引号是否很重要?您可以随时读取它,然后在将数据导出到CSV之前修改数据。

我通常做的是用双引号括起所有内容,并将“,”(双引号逗号双引号)组合成我的分隔符。这样,如果我偶然发现随机双引号或随机逗号,这不是什么大问题。