【问题标题】:CSV generation having problem with ',' [duplicate]CSV 生成存在“,”问题 [重复]
【发布时间】:2011-07-27 14:39:11
【问题描述】:

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

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

for($i=0;$ifetchRow($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"; } 返回 $outstr;

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

【问题讨论】:

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


    【解决方案1】:

    为了构造一个 CSV 文件,你不应该使用字符串连接。

    相反,您应该使用fputcsv() 函数——如果您不想写入文件,但得到一个字符串,请查看users notes,其中您'会找到几种可能的解决方案;-)


    使用该功能,您不必自己处理转义外壳或分隔符:所有这些都已经为您完成了。

    【讨论】:

    【解决方案2】:

    如果列数据本身有逗号,则应使用双引号将其转义。

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

    col1,col2,"some,data",col4
    

    所以最好为你的列数据加上双引号。

    【讨论】:

      【解决方案3】:

      你必须像这样把值放在引号中

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

      将此格式应用于所有数据列,仅此而已。

      【讨论】:

      • 谢谢老兄...这正是我想要的
      • 注意:如果您的文本现在包含",则需要将其替换为""。对 CSV 的无限热爱。
      • @ZeissS:无需将htmlspecialchars 替换为htmlspecialchars($data,ENT_QUOTES)
      猜你喜欢
      • 1970-01-01
      • 2010-11-08
      • 2014-06-14
      • 2017-12-02
      • 1970-01-01
      • 2017-08-13
      • 1970-01-01
      相关资源
      最近更新 更多