Php 如何正确地将带有逗号的表记录值导出到CSV文件?
我有一个将值导出到CSV文件的函数,但是comments字段中有逗号,当您在电子表格程序中打开它时,它会弄乱列 有没有办法正确地导出它Php 如何正确地将带有逗号的表记录值导出到CSV文件?,php,mysql,csv,Php,Mysql,Csv,我有一个将值导出到CSV文件的函数,但是comments字段中有逗号,当您在电子表格程序中打开它时,它会弄乱列 有没有办法正确地导出它 //this exports only names and comments into a CSV file function exportNamesCommentsCSV($table, $columns) { $file = "volunteer_comments"; $csv_output = ''; $table = 'volun
//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;
}
编辑:这将是一个评论的例子
我更喜欢在大门工作,但我真的可以在任何地方工作
上面示例注释中的逗号会抛出正确的列结构。您需要将条目包装在限定符中;通常引用
"col1", "col2,,,", "col3"
如果条目包含引号,则需要将其加倍
这篇文章您需要做的是将值括在引号中,如下所示:
"value","value","value"
这将正确处理值中的逗号,数值也可以正常工作
但是,要在值中加引号,需要将两个引号放在一起。例如,表示此字符串:
Bobby says, "Hi!"
它需要表示为
"some value","Bobby says, ""Hi!""","Some other value"
您可以通过以下方式执行此操作:
$csv_value = "\"" . eregi_replace("\"", "\"\"", $orig_value) . "\"";
实现所需功能的一种方法是在注释字段上执行搜索和替换,前提是您确定这是唯一可以包含嵌入逗号的字段
您可能还需要检查备注字段是否不能包含CRs或LFs,它们也会影响csv文件的导入。PHP具有为您创建逗号分隔文件的功能 查看函数。它允许您执行以下操作:
<?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);
?>
以后当你需要阅读时,如果你曾经阅读过,你可以使用
因此,在您的情况下,您需要做的就是创建一个数组,每个数组都有名称和注释,然后通过fputcsv输入,您就是黄金。我在哪里添加$csv\u值=。。。我当前函数中的代码行?我不确定如何在我当前的代码中实现这一点。
"this has, commas, in it",bbb,ccc,dddd
123,456,789,"this is ""like this"""
1234,124,1242,"yay, woo""!"""