UTF-8とUTF-8N

phpのheader()関数でページを移動しようとしたところ

Warning: Cannot modify header information - headers already sent by (output started at ***.php:1) in ***.php on line 3

みたいなエラーが出た。いつもならこの関数を呼ぶ前に何か余計なヘッダを吐いているのでこれを消せばいいのだけど、今回は見つからなくてどうやらファイルの1行目の <?php からそのエラーが出ているようだ。ということはファイル自体に問題があるので試しに文字コードEUC-JPにしてみるとエラーが消えた。UTF-8だとエラーが出て、UTF-8Nにしたところうまくいった。

UTF-8はBOM(バイトオーダーマーク)付きでUTF-8NはBOM無しということらしい。どうやらこのBOMがひっかかっていたようだ。