Ajax UTF-8形式で保存した時の BOM(Byte Order Mark)について。

【講座名】
Ajax初心者入門講座 について

【K.Fさんよりご指摘】
既にご存知かと思いますが,「Step20・中継プログラムを使う 」において

・ (2)UTF-8 形式で保存すると header() の部分がうまく動きませんでした
・ UTF-8 で保存すると何故そうなるのか原因はわからないのですが

とのことですが,この原因はUTF-8で保存したときに自動でファイルの頭に付く
Unicodeサイン(BOM)にあると思います。

BOMをはずしてUTFで保存すると, http://localhost/ajax/sample004/pref.php
xmlとして表示することができました。

以前PHPでセッション関数を使用した時に,やはりUTF-8で保存し,エラーが出て
ひっかかったことがあったので,このケースもそうではないかと思いました。
※PHPのセッション関数では,session_start()以前にゴミが入るとエラーが返る


【補足】
K.Fさん、ご指摘ありがとうございました。

Unicode の UTF-16 だけでなく、UTF-8 などでも先頭に BOM(Byte Order Mark) が付いている場合があるようです。

(1)sample004 の pref.php は SHIFT-JIS 形式で保存しましたが、これをWindows用のバイナリエディタで開くと、以下の図のようになります。

・Stirling(スターリング)というバイナリエディタで開いた例
qa-13.gif

↑「3C」から始まる先頭に注目してください。これが正常な状態です。
画面右側には、対応するソースコードが表示されています。


次は pref.php を UTF-8形式で保存してみましょう。

(2)pref.php をTeraPadで開き、メニューから「ファイル→文字/改行コード指定保存」を選択します。

qa-14.gif


(3)文字コードに「UTF-8」を選択し、「OK」をクリックします。

qa-15.gif


(4)TeraPadの下部の表示が、「UTF-8」に変わりました。

qa-16.gif

これで準備OKです。TeraPadは一度閉じてください。


(5)もう一度、pref.php をバイナリエディタで開くと、先頭に記号が挿入されています。

qa-17.gif

↑先頭に「EF BB BF」が加わっています。
UTF-8形式だと、このBOMが原因で正常に表示できませんでした。右側のソースコードを見ても、何か文字が加わっていることが分かります。


(6)BOMを外すには、TeraPadで保存する時に、「UTF-8N」を選択するだけです。

qa-18.gif


(7)TeraPadの下部の表示が、「UTF-8N」に変わりました。

qa-19.gif


(8)再度 pref.php をバイナリエディタで開くと、先頭の記号がなくなりました。

qa-20.gif

これで pref.php が正常に動作し、XMLが表示されるようになります。


【ワンポイント】
UTF-8N 形式で保存したファイルを、再び TeraPad で開くと、自動的に SHIFT-JIS 形式と判断されるので、注意してください。

qa-21.gif

もし編集する場合は、UTF-8N 形式で再度保存することを、忘れないようにしてください。

スポンサードリンク


スポンサードリンク






プログラミング入門 Q&A TOPへ