/* generate csv content */
while($res = mysql_fetch_assoc($query)) {
/* If two or more columns of the result have the same field names, the last column will take precedence. */
for($i=0; $i<mysql_num_fields($query);$i++) {
$data = $res[mysql_field_name($query,$i)];
$data = trim( preg_replace( '/\s+/', ' ', $data ) );
echo "\"".$data."\";";
}
echo "\r\n";
}
以下代码旨在删除额外的空格或换行符并生成csv文件。我的问题是,在某些工作站上,csv文件显示正确,而在其他工作站上显示不正确,尽管所有工作站都具有相同的区域和语言设置。
还有其他我应该检查或使用不同的代码生成适当的csv文件来清理隐藏的空格或换行吗?
我发现了一些有关区域和语言设置选项的错误设置,尽管设置我们是相同的,在区域选项&gt;自定义&gt;数字&gt;列表分隔符它与“;”不同所以这解释了一些报道的问题。
修复是实现正确的csv代码生成器并检查工作站配置。
答案 0 :(得分:3)
试试这个:
$outfp = fopen('php://output', 'w');
while ($row = mysql_fetch_assoc($query)) {
foreach ($row as &$field) {
$field = preg_replace('/\s+/', ' ', trim($field));
}
fputcsv($outfp, $row, ';');
}
使用fputcsv()
将产生比手动编写的任何内容更好的输出,考虑到您的代码没有的许多边缘情况。您可以将其写入php://output
,它与echo
相同。
答案 1 :(得分:0)
而不是
for ($i=0; $i<mysql_num_fields($query); $i++)
应该是
for ($i=0; $i<mysql_num_fields($res); $i++)
查看正确的字段数。