ようこそ!逆襲のニートブログへ

ブログ内検索

最近の記事

はてなブックマーク数

この日記のはてなブックマーク数

カテゴリー

月別アーカイブ

BOM付きUTF-8による空白行

PHPスクリプトファイルをUTF-8で保存したら、InternetExplorer6.0で表示させた時に、ブラウザ画面の一番上が1行分空白になった。

謎の空白行だ。

空白の原因は、「BOM」付きのUTF-8という文字コードを使っていたことだった。
「BOM」無しのUTF-8Nという文字コードに変更したところ、この空白は解消された。
めでたし、めでたし。

BOM(Byte Order Mark)

UnicodeのUTF-16など16ビット幅のエンコーディング方式において、エンディアンを指定するためにファイルの先頭に記入される16ビットの値。
エンディアンが関係ないUTF-8などの文書でも先頭にBOMがついている場合がある。



エンディアン(endian)

2バイト以上のデータ量を持つ数値データを記録したり転送するときには1バイトごとに分割するが、その際の記録/転送を行なう順番のこと。
最上位のバイトから順番に記録/送信する方式を「ビッグエンディアン」、最下位のバイトから順番に記録/送信する方式を「リトルエンディアン」という。
バイトオーダーの違うコンピュータ同士でデータをやり取りする場合、相手のバイトオーダーを考慮しないと値が狂ってしまう。



UTF-8には、
(1) BOM付きのUTF-8
(2) BOM無しのUTF-8N
という区別があることを学んだ。

これからは、スクリプトファイルを保存するとき、UTF-8ではなくてUTF-8Nで保存するように意識しよう。


index.phpで、

<?php
include("common.php");
?>


と書いて、common.phpがUTF-8だと、index.phpを表示させたときに、ブラウザ上で先頭に空白行が1行分現れる。

//include("common.php");


という具合に、インクルードをコメントアウトして無効にすると、空白行が消える。

一体何なんだろう?と悩んでネットで質問したら、教えてくれた人がいました。
「UTF-8ならBOMが原因かも?」と。

で、BOMについて調べて、UTF-8とUTF-8Nの違いを知り、それぞれの文字コードで試したら解決しました。

UTF-8ではなくて、UTF-8Nを使うのが吉みたいですね。

とりあえずはOKでしたが、もう少し文字コードの仕組や、処理について勉強した方がいいな。



<追記>
文字コードについて検索していたら、同じような現象に出くわしている方がいました。メモメモ

文字エンコーディングについて考えてみる
http://www.coolwebwindow.com/weblife_column/coolweb/000125.php

空白ができる理由
最初の問題、phpをインクルードしたら、空白ができてしまった問題を解いていきます。
私は文字エンコーディングにUTF-8を使用していました。
BOMをつけると「EF BB BF」という文字をファイルの文頭に出力してしまいます。
これが、空白の原因でした。BOMなしにするとこの空白はなくなりました。
今回の場合空白ができただけでエラーにはなりませんでしたが、phpなどでheader関数を使用している場合、headerよりも前に「EF BB BF」という文字を出力してしまうのでエラーになってしまったりするようです。


関連記事

コメント

ありがとうございます!!!!!
おかげさまで直せました!!!
本当に感謝です!!!本当に有難うございました!!

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバックURL:
http://gooddays1.blog37.fc2.com/tb.php/231-50383ce6