PHP UTF-8 BOM 文字化け
「『phpでUTF-8を扱う場合、BOM付きだと文字化けを起こす』。そう思ってた時代がオレにもありました。」
…いや、今も昔も文字化けするんですね。
携帯で「・ソ・ソ・ソ・ソ」って表示されて困ったことがあって…っていうのを前のブログに書いたんですが、移転作業中にそういえば記事エクスポートするの忘れて全部消えたんで改めてちょろっと簡単に書いておこうと思いました。
テキストエディタは色々ありますが、UTF-8でファイルを保存する場合に例えばPHPEditorなんかだとUTF-8にしてもファイルの先頭2,3行目くらいに日本語が入ってないと何故かどうやっても勝手にShift_JISで開いちゃうのでくそ面倒だからBOM付きにするとちゃんとUTF-8ファイルって認識されて文字化け解決したよーわーいってなるんですが、実際サーバでどう見えるかって言ったら「?????」とかになってムッキー!となるわけです。
表題みたいなワードで検索してみると、PHPはUTF-8のBOM有りを正しく扱えない、みたいな情報が出てきます。
まあ文字化けするなら仕方ないですよね。
最近は特にUTF-8が基本だと思いますし、BOMは無しというのを頭の中でデフォにしていくのがいいと思います。
自分も前の経験則で自然とBOM無しでずっとやってきたので、不具合提示された時に逆に原因がすぐ掴めなくて焦りました。
ルールを知り、それを守っていれば、文字化けなんて怖くないよ…怖く…な……い………
[追記]
改行コードもLFのみが推奨されています。まあややこしいんで、職場で開発環境とかコーディングルール統一すれば問題は無いんじゃないですかね。
それと、PHPのみで記述されているファイルにPHP閉じタグを書くと、使用しているテキストエディタによってはBOMが自動的に付加されることがあるようです。(UTF-8Nが明示的に選択できなかったりするエディタは論外かと)
http://twitter.com/alphabet_h/status/32325759250989056
自分でこの問題にあたったことは無いのですが、PHPの閉じタグは書かない風潮なので従ったほうがいいでしょう。
PHPの閉じタグは心の臓に悪いから使わないで - Unknown::Programming
http://d.hatena.ne.jp/fbis/20090716/1247714151
Zend Frameworkのコーディング規約にあるんだったら余計に、後で他人と喧嘩にならずにドヤ顔でいられますね。