0
/* 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 文件以清除隐藏空间或新行吗?

稍后编辑

我发现了一些关于区域和语言设置选项的错误设置,尽管我们的设置相同,但在区域选项>自定义>数字>列表分隔符中它与“;”不同 所以这解释了一些报告的问题。

解决方法是实施正确的 csv 代码生成器并检查工作站配置。

4

2 回答 2

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://outputechoing 一样。

于 2012-04-18T09:04:12.837 回答
0

代替

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

它应该是

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

查看正确的字段数。

于 2012-04-18T09:04:21.213 回答