ずっと無視していたのですが、このブログのページ上部に文字化けした文字が出現することがたまにありました。その文字化けの解決方法について記録しておきます。
とりあえず、どの辺りが原因になっているのかを少しずつ index.php ページの要素を削りながら、再現するかを試していったところ、最終的に残ったのはページの先頭の PHP で include_once していた部分。
include_once("define.php");
include_once("menuData.php");
include_once("printHeader.php");
include_once("printFooter.php");
include_once("indexContent.php");
include_once("entryData.php");
include_once("easyLinkTypedData.php");
これを消していくと文字化けの文字数が減っていきました。どうやらひとつひとつが文字化けを発生させているらしい。
もしや..と思って index.php やインクルードしている php ファイルのエンコーディングを確認してみたところ、案の定 index.php の方は UTF-8 BOM なしで、その他のインクルードファイルは UTF-8 BOM ありになっていました。
UTF-8 BOM なしのファイルから BOM ありをインクルードしてしまっていたので、BOM 部分が文字化けしてしまっていたということですね。まさかのエンコーディングあるあるにすぐ気づかなかったとは。ファイル間のエンコーディングを統一することで文字化けは完全に解消することができました。
ただ、文字化けが毎回起こるわけではなく、偶発的にしか起こらない原因はいまいちよくわかりませんでした。毎回起こるならすぐ調べて気づけたと思うんですが..
とは言え、ずっと気持ち悪かった問題を解消できてよかったです。
最後に BOM による文字化けについてわかりやすく書いてある記事を見つけたのでリンクを貼っておきます。