PHP のヘッダーを介して正しい文字セット情報を送信する際に問題があります。
私のコードでは、ISO-8859-2 でエンコードされた CSV 文字列を作成しました。次のコード(簡略化)を使用して、これをブラウザに出力しています。
$csv = 'iso-8859-2 encoded string, Łukasz Szukała';
header('Content-Type: text/csv; charset=ISO-8859-2');
header('Content-Disposition: attachment; filename=report.csv');
echo $csv;
結果のファイルは、エディター (私は Notepad++ を使用しています) で開くと ISO-8859-1 として検出されるため、正しく表示されません。
文字列を UTF-8 に変換すると、期待どおりに動作します。
$csv = 'iso-8859-2 encoded string, Łukasz Szukała';
$csv = iconv('ISO-8859-2', 'UTF-8', $csv);
header('Content-Type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename=report.csv');
echo $csv;
この場合、文字セット部分を完全に省略することもできます。
ただし、ファイルを ISO-8859-2 でエンコードする必要があり、ヘッダー情報によってファイルが ISO-8859-2 として検出されない理由がわかりません。IANA ( http://www.iana.org/assignments/character-sets/character-sets.xhtml )に従ってさまざまなエイリアスも試しましたが、どのブラウザーでも動作しません。
貴重なご意見をお待ちしております。