現象

ビューのテンプレートをXHTML形式にしている場合に、ブラウザで以下のようなエラーがでた場合の対処法は以下のとおり。

XML パースエラー: 実体の初めに XML またはテキスト宣言がありません。
行番号: 1, 列番号: 3:
–^

想定原因

phpの閉じタグ(?>)の周辺にバグを作りこんだ可能性が高いということ。エラーが出た画面(もしくはその前)のコントローラで読み込んでいるライブラリやモデルがあやしい。

発生傾向

重層なモデルがあるフレームワークや他人のライブラリを沢山使用しているとき稀に起きる

発生ケースの例


/* CASE1  phpの閉じタグとEOFの間にスペースがある。 */
?> [EOF]


/* CASE2 phpの閉じタグ直後の改行とEOFの間にスペースがある。*/
?>
 [EOF]

対策

対処法としては、phpの閉じタグ以降は、スペース(改行も)を入れないように注意。もしくは、閉じタグ自体を初めから書かないことかな(全てという意味ではない)。どちらにしても、後で見つけたり変更するのは面倒なのでコーディング規約を決めるときは忘れずに盛り込んだ方が無難。

XHTML対応が増えるとこういう問題が表面化しますな。