20121009

PHP CSVダウンロードの怪

PHPでサーバ上にCSVファイルを作成し、ダウンロードすると先頭に文字化けした文字がついてしまい、はまったのでメモ。

ダウンロードしてファイルをExcel閲覧すると、最初の日付データの書式がおかしい。
正確に言うと、次の行の日付書式は「YYYY/MM/DD」なのに、先頭が「YYYY-MM-DD」となっている。
作成データ的にはDBの書式なので「YYYY-MM-DD」が正しいのだが、どうもExcelの認識として、日付ではなく文字列として認識して表示してるようだ。

何で?とおもってテキストエディタで閲覧してみたら、先頭に「?」がくっついている。
何だ?とおもってCSVデータ作成過程を見直してもおかしなところは見当たらない。
作成したサーバ上のCSVを見ても「?」は無い。

PHPの設定はUTF-8、ダウンロードページもUTF-8、ファイルもUTF-8。
どうしても取れない。

調べてみたら、「Byte Order Mark」通称BOM(ボム)って物らしい。
ボムはエンディアン(データ順の指定)のためにくっついているらしい。

さて、どうやって取ったらいいの?

ボムはソースファイルに巣食っているらしく、PHPのソースファイルを全て「UTF-8N」で保存しなおしたら、消えた。。
「UTF-8N」ってのは、UTF-8のボム無って意味らしい。(テキストエディタによって違うと思います。)

知らんがな。

0 件のコメント: