かるハマりしたので、メモ。
PHPで作成しているシステムがいきなりリダイレクト処理(header(‘Location: ~’))が動かなくなった。
原因は文字コードがBOM付になってたこと
ファイルを確認すると、「UTF-8 BOM付」ってなってた。
BOMを外すと、現象解決した!
BOMって何だ?
正式名称は「バイトオーダーマーク(byte order mark)」。
Unicodeの符号化形式で符号化したテキストの先頭につける数バイトのデータのことで、このデータを元にUnicodeで符号化されていることおよび符号化の種類の判別に使用するとのこと。
PHPとBOM
PHPのheader関数を呼び出す前は、echoとか出力しちゃダメなのは知ってた。
BOM付ファイルの場合、headerの前にBOMが出力されるらしく、同じ理由で動かなくなるそう。
ほほー。今後は注意しよう。