UTF-8とUTF-8N

これでActionやテンプレートをUTF-8で書いても文字化けしなくなったのだが、代わりにWindowsXP+IE6の環境ではページの上のほうに1行分の変な余白が見えるようになってしまった。Firebugで確認しようとすると、うまく選択できないブロック要素があったりしてなんかおかしい。タグの対応関係はちゃんと取れてるのに。

メモ帳やFirefoxのソース表示では分からないが、表示されたページをいったんローカルに保存してxyzzyなんかで見てみるとのあたりにゴミデータが混ざっていた。これが原因らしい。

なんでこんなデータが混ざるようになったのか調べてみると、前述のUTF-8への変換の際に「UTF-8N」にしなかったのが原因だった。これによってファイルの先頭24bitにバイトオーダーマーク(BON)が付加されて、それがインクルードによってファイル途中に現れるゴミデータになってしまったと。

UTF-8とUTF-8Nの違いはここが分かりやすかった。UTF-8にBONを付加する意味ってあんまりないような…。http://www.ffortune.net/comp/develop/data/utf.htm

PHPは、UTF-8といえばBONのないUTF-8Nであることを前提とするらしい。これから気をつけないと。