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(スターリング)というバイナリエディタで開いた例
↑「3C」から始まる先頭に注目してください。これが正常な状態です。
画面右側には、対応するソースコードが表示されています。
次は pref.php を UTF-8形式で保存してみましょう。
(2)pref.php をTeraPadで開き、メニューから「ファイル→文字/改行コード指定保存」を選択します。
(3)文字コードに「UTF-8」を選択し、「OK」をクリックします。
(4)TeraPadの下部の表示が、「UTF-8」に変わりました。
これで準備OKです。TeraPadは一度閉じてください。
(5)もう一度、pref.php をバイナリエディタで開くと、先頭に記号が挿入されています。
↑先頭に「EF BB BF」が加わっています。
UTF-8形式だと、このBOMが原因で正常に表示できませんでした。右側のソースコードを見ても、何か文字が加わっていることが分かります。
(6)BOMを外すには、TeraPadで保存する時に、「UTF-8N」を選択するだけです。
(7)TeraPadの下部の表示が、「UTF-8N」に変わりました。
(8)再度 pref.php をバイナリエディタで開くと、先頭の記号がなくなりました。
これで pref.php が正常に動作し、XMLが表示されるようになります。
【ワンポイント】
UTF-8N 形式で保存したファイルを、再び TeraPad で開くと、自動的に SHIFT-JIS 形式と判断されるので、注意してください。
もし編集する場合は、UTF-8N 形式で再度保存することを、忘れないようにしてください。