csv文件坏了

/* 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文件显示正确,而在其他工作站上显示不正确,尽pipe所有工作站都具有相同的区域和语言设置。

还有什么我应该检查或使用不同的代码来生成适当的csv文件,清理隐藏的空间或新行?

后期编辑

我发现了一些有关区域和语言设置选项的错误设置,虽然我们是相同的设置,在区域选项>自定义>数字>列表分隔符是不同于“;” 所以这就解释了一些报道的问题。

解决办法是实施适当的csv代码生成器并检查工作站configuration。

尝试这个:

 $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一样。

代替

 for ($i=0; $i<mysql_num_fields($query); $i++) 

它应该是

 for ($i=0; $i<mysql_num_fields($res); $i++) 

看看正确的字段数量。