空白を探せ

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); ?>

これで空白が入っちゃうのでした。えー、あー、なる。えぇぇぇ!



かなり長いこと悶絶した。