首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何正确导出带有逗号的表记录值的CSV文件?

问如何正确导出带有逗号的表记录值的CSV文件?
EN

Stack Overflow用户
提问于 2009-02-17 00:39:37
回答 4查看 3.7K关注 0票数 0

我有一个将值导出到CSV文件的函数,但是"comments“字段中有逗号,当您在电子表格程序中打开它时,它会弄乱列。

有没有办法正确地导出它?

代码语言:javascript
复制
//this exports only names and comments into a CSV file
function exportNamesCommentsCSV($table, $columns) {
    $file = "volunteer_comments";
    $csv_output = '';
    $table = 'volunteers_2009';
    $result = mysql_query("select * FROM ".$table."");
    $i = 0;
    if (mysql_num_rows($result) > 0) {
        while ($row = mysql_fetch_assoc($result)) {
            $csv_output .= $row['Field'].", ";
            $i++;
        }
    }
    $csv_output .= "\n";

    $values = mysql_query("SELECT lname, fname, email, comments FROM ".$table."");

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

    $filename = $file."_".date("Y-m-d_H-i",time());
    header("Content-type: application/vnd.ms-excel");
    header("Content-disposition: csv" . date("Y-m-d") . ".csv");
    header( "Content-disposition: filename=".$filename.".csv");
    print $csv_output;
    exit;
}

编辑:这将是一个评论的例子...

我更喜欢在大门工作,但我真的可以在任何地方工作。

上面示例注释中的,(逗号)偏离了正确的列结构。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-17 00:43:31

您需要做的是将值括在引号中,如下所示:

代码语言:javascript
复制
"value","value","value"

这将正确地处理值中的逗号,并且数值仍然可以正常工作。

但是,要在值中加上引号,您需要将两个引号放在一起。例如,表示此字符串:

代码语言:javascript
复制
Bobby says, "Hi!"

它将需要表示为

代码语言:javascript
复制
"some value","Bobby says, ""Hi!""","Some other value"

您可以使用以下命令来完成此操作:

代码语言:javascript
复制
$csv_value = "\"" . eregi_replace("\"", "\"\"", $orig_value) . "\"";
票数 9
EN

Stack Overflow用户

发布于 2009-02-17 01:18:03

PHP有处理逗号分隔文件的函数。

查看fputcsv函数。它可以让你做这样的事情:

代码语言:javascript
复制
<?php
$list = array (
    array('this has, commas, in it','bbb','ccc','dddd'),
    array('123','456','789', 'this is "like this"'),
    array('1234','124','1242', 'yay, woo"!"')
);

$fp = fopen('file.csv', 'w');

foreach ($list as $record) {
    fputcsv($fp, $record);
}

fclose($fp);
?>

文件file.csv中将包含以下内容:

代码语言:javascript
复制
"this has, commas, in it",bbb,ccc,dddd
123,456,789,"this is ""like this"""
1234,124,1242,"yay, woo""!"""

以后当你需要阅读它时,如果你曾经阅读过,你可以使用fgetcsv。

因此,在您的情况下,您所需要做的就是创建一个数组,每个数组都有名称和注释,然后将其放入fputcsv,您就成功了。

票数 6
EN

Stack Overflow用户

发布于 2009-02-17 00:42:42

您需要将条目放在限定符中;通常是引号。

代码语言:javascript
复制
"col1", "col2,,,", "col3"

如果条目包含引号,则需要加倍使用它们。

这是一篇Wikipedia文章

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/555171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档