文字コードUTF-8で、BOMの有無による問題
2007/08/18 | PHPで遭遇した問題とその解決
Xoopsのモジュールを書いていて、すごく悩ましい問題に出くわした。
テンプレートを2つ(それぞれ仮にAとBと呼ぶことにする)用意したのだが、同じようなタグしか記述していないのに、どうしても片方で余白ができてしまう。原因を突き止めるためにテンプレートの中身を最低限の内容にしてみた。
テンプレートAの中身
<div>A</div>
テンプレートBの中身
<div>B</div>
しかしこれでも片方で余白が出来てしまう。これはスタイルシートとかタグレベルの問題ではないことは明白だ。では何がそうさせるのか。
答えは「UTFのBOM」でした。
最近は文字コードとしてUTF-8を使用するようにしている。テキストエディタとしてEmEditorを愛用しているのだが、UTF-8でもBOMの有無を設定できるようになっている。
BOMとはUTF-16で必要となる「ビット列の並び」を示す符号のようなものだ(検索したらそう書いてあった)。本来UTF-8では必要ないはずなのだが、UTFで書かれているということを示すためだけにBOMがつけられるとのことだった。
前述の問題は片方のテンプレートがBOM付きで保存されていたことが問題で、BOMをとって保存すると余白なく表示されることを確認できた。
いずれにしても文字コードは、問題を引き起こす原因の一つであることは間違いないようだ。