🐘
PHPのCSV文字化け対策
はじめに
PHPユーザーのみなさんこんにちは。
PHPでCSVファイルを出力するとき、日本語が文字化けすることあると思います。
特にExcelでCSVファイルを開くとき、エンコーディングが正しくないと
意図していない表示になってしまいます。
そこでこの記事ではCSV出力時に注意すべきことまとめます。
結論
関連するファイルのエンコードがUTF-8 with BOMとなっていないか確認しましょう!
CSV出力処理が記述されているファイルだけでなくインクルードされているファイルも確認する必要があります。
PHPではrequire_once()などで読み込んだファイルにBOMが含まれていると
インクルードしているファイルのエンコードがたとえUTF-8としていても
UTF-8 with BOMとなってしまいます!
解決手順
これ以降は実際に実務でCSVの文字化けを解決していく様子を備忘録として残します・
- DBから取得したい時点で文字化けしている可能性を考え、デバックを実施するが、問題なし
- PHPのエンコード関数が上手く言っていない?
関数通過直後のエンコーディングを確認するが、問題なし - 出力されたCSVファイルのエンコードを確認すると、
「uft-8 with BOM」となっていることに気付く。
ChatGPTに確認してみるとPHPファイル自体にutf-8 with BOMになっていると
そこから出力されるファイルのエンコードが強制的にBOMつきになる。
しかし、CSV出力処理が記述されているPHPファイルのエンコードはutf-8。 - 再びChatGPTに確認すると、インクルードされているファイルの中にBOM付きPHPファイルが
あると、それ以降のファイルもBOM付きになるらしい。 - 全てのファイルのエンコードを確認すると、「setting.php」といういかにも全てのファイルが
読み込んでいそうなPHPファイルのエンコードがBOM付きであることを発見。 - 「setting.php」のエンコードをutf-8に変更すると、出力されるCSVファイルのエンコードも
適切になった!!無事解決!!!
Discussion