csv文件坏了

时间:2012-04-18 08:53:52

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

还有其他我应该检查或使用不同的代码生成适当的csv文件来清理隐藏的空格或换行吗?

LATER EDIT

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

修复是实现正确的csv代码生成器并检查工作站配置。

2 个答案:

答案 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++)

查看正确的字段数。