CSV生成有','的问题

时间:2011-04-01 10:54:35

标签: php zend-framework csv export-to-csv

  

可能重复:
  PHP code to convert a MySQL query to CSV

您好我正在用“,”逗号分隔的mysql记录生成一个csv文件。我从数据库中获取数据并将其连接成一个字符串。我正在使用以下代码

for($i=0;$i<count($all_logs);$i++)
        {
            $rd=$project->fetchRow($project->select()->where('id='.$all_logs[$i]->user2project_id));
            $username=$userid->fetchRow($userid->select()->where('id='.$all_logs[$i]->user_id));
            $outstr .=$all_logs[$i]->log_date.",";
            $outstr .=$username->username.",";
            $outstr .=$rd->title.",";
            $outstr .=$all_logs[$i]->task.",";
            $outstr .=$all_logs[$i]->workdesc.",";
            $outstr .=$all_logs[$i]->hours.",";
            $outstr .="\n";
        }
        return $outstr;

现在我的问题是什么。如果任何列数据本身具有“,”逗号,则它将此1列拆分为2列。例如,如果我的列workdesc具有此I worked on this,that,these and those之类的数据,那么它会将此1列放入生成的csv中的3列。任何人都可以告诉我如何摆脱这种情况......

3 个答案:

答案 0 :(得分:7)

为了构建CSV文件,不应使用字符串连接。

相反,您应该使用fputcsv()函数 - 如果您不想scrite到文件,但得到一个字符串作为结果,请查看users {{3在其中,您将找到几种可能的解决方案; - )


使用该功能,您不必处理转出机箱或自行分隔:所有这些都已经为您完成。

答案 1 :(得分:2)

您必须将值放在引号中

$outstr .='"'.$username->username.'",'; //output ://"somvalue contain , comma"

在所有数据列上应用此格式,就是这样。

答案 2 :(得分:1)

如果列数据本身有逗号,那么您应该使用双引号来转义它。

例如,如果你的columndata =“some,data”;那你的csv应该看起来像 -

col1,col2,"some,data",col4

最好为列数据附上双引号。