-
3月192010
PHP mb_convert_encodingで文字化け 必ずファイルの一番最初が?になる
No CommentsPHPでMVCモデルのシステムを運用していて急に出てきたエラーの話です。
MVCのView、デザイン部分はテンプレートファイルとして
運営者側がファイルを変更することが多いのですが、
その保存時にちょっとした罠?がありましたのでメモ。
今回文字化けが起こったシステムでは、
テンプレートファイルはUTF-8、
PHP側でmb_convert_encodingを使って
UTF-8をShiftJISに変換して表示させています。
今回はこのテンプレートファイル保存時にUTF-8で保存して
サーバにアップして表示してみると、
なぜかファイルの一番初めに?と表示されました。
で、原因を探ってみると、
ファイルの一番最初にBOM(Byte Order Mark)というのがついていて
これをPHPのmb_convert_encodingが変換できず、?と表示されていた
ということでした。
このBOM、調べてみると、
UTF-8だとBOMあり
UTF-8NだとBOMなし
になるそうで。
今回はTerapadでファイル保存するときに「UTF-8」を選んだことが原因でした。
そういえば、UTF-8とUTF-8Nって何が違うのか、
気になったことがありましたけど、放置していました。
こんなところでエラーの原因になってしまうとは思いもよりませんでした。
知識不足を痛感です。
参考:
UTF-8 と UTF-8N の違いは何か?





