【问题标题】:Need to export string w/ commas in it properly into a CSV file需要将带有/逗号的字符串正确导出到 CSV 文件中
【发布时间】:2009-04-21 00:43:24
【问题描述】:

编辑:将函数的错误部分复制到这个问题中,下面是适当的部分。

$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";
}

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

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

如何让它正确导出 cmets 字段数据?

【问题讨论】:

    标签: php mysql csv


    【解决方案1】:

    您应该查看fputcsv()。那里也有一些有用的 cmets。

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

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

    【讨论】:

      【解决方案2】:

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

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

      请注意,这非常非常接近问题Dealing with commas in a CSV file

      【讨论】:

      • 嗯,这个更具体的语言(我认为该问题的选择答案是用 C 或 C++ 编写的?)。 sshow 在这里提供了一个非常好的特定于 php 的解决方案,而在其他问题中没有给出。
      • 这就是为什么我说“接近另一个问题”而不是“接近 - 因为完全重复”(这很有趣,但在我的英语方言中,这两个词“接近”的发音不同;第一个有尖锐的咝咝声s;第二个有浊z音)。
      • 此外,x-ref'd 问题的答案提供了生成代码以解决此问题(或评估建议解决方案的输出质量)所需的算法信息。
      【解决方案3】:

      嗯,为什么不直接使用内置的 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> 
      

      【讨论】:

        【解决方案4】:

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

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

        【讨论】:

        • @ 可能不是一个很好的例子,因为它会在电子邮件地址中......但这只是一个例子。
        【解决方案5】:

        编辑:我的错,我刚刚测试了它,但它不起作用——至少在 Excel 中不起作用。

        不过,您可以将逗号替换为其他内容:

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

        【讨论】:

          【解决方案6】:

          在导出数据时保留数据中的逗号和双引号是否重要?您始终可以将其读入,然后在将数据导出到 CSV 之前对其进行修改。

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

          【讨论】:

            猜你喜欢
            • 2011-03-03
            • 1970-01-01
            • 2023-01-16
            • 2022-06-11
            • 2011-07-19
            • 2017-05-07
            • 2021-06-03
            • 2023-03-05
            • 1970-01-01
            相关资源
            最近更新 更多