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()すると、コードにない多くのエッジ ケースを考慮して、手動で記述できるものよりもはるかに優れた出力が生成されます。あなたはそれを書くことができ、それをingするphp://outputのと同じになります。echo

于 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 に答える