謎の空白行だ。
空白の原因は、「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」という文字を出力してしまうのでエラーになってしまったりするようです。