空白を探せ
line 2 column 1 - 警告: removing whitespace preceding XML Declaration
HTML Validator に「XML宣言の前の空白を削れよ、バカ」と怒られる。
<?xml version="1.0" encoding="utf-8"?> !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> ...
出力された HTML ソースを見ると、確かに改行が入ってる……。テンプレートを確認しまくったが、余計な改行などない……。
犯人はこいつ、Smarty のカスタム識別子
$ cat modifier.hoge.php <?php function smarty_modifier_hoge($string) { return "hoge"; } ?>
このファイル末尾の改行!
Smarty ではテンプレートをコンパイルしていて、ファイルの先頭に識別子を一気に読み込むようになっている。
<?php /* Smarty version 2.6.12, created on 2006-03-14 15:00:41 compiled from show/default.html */ ?> <?php require_once(SMARTY_CORE_DIR . 'core.load_plugins.php'); smarty_core_load_plugins(array('plugins' => array(array('modifier', 'escape', 'show/default.html', 7, false),array('modifier', 'nl2br', 'show/default.html', 20, false),array('modifier', 'hoge', 'show/default.html', 186, false),)), $this); ?>
これで空白が入っちゃうのでした。えー、あー、なる。えぇぇぇ!
かなり長いこと悶絶した。