いつものようにSmartyを使って開発をはじめようとテンプレートをコーディングしたのですが、初っ端から見たこともないエラーが出力されました。
Fatal error: Smarty error: [in template.html line 60]: syntax error: unrecognized tag: " name="logo" border="0" id="logo" />
とりあえず、メッセージのとおり60行目を調べてみると、どうも「日本」という文字がエラーらしい。
よくわからない。
悩むこと半日、見つけました。。。
どうもSmartyはshift-jisでは相性が悪いみたいです。
shift-jisの2バイト文字の扱いに不慣れなようで、文字コードの中からSmartyの標準デリミタである「{」と「}」を拾ってしまうらしいです。つまり、デリミタと同じ文字コードパターン(「{」:0x816F、「}」:0x8170)が出現したところでエラーになります。
これはなかなか見つからないわけですね。
過去のSmartyでの開発はほとんどUTF-8だったので、これまで発生しなかったのも納得。
それにしても「たまたま発生するエラー」って開発者泣かせですね。
回避策としてはSmartyのliteralタブで囲って、その部分だけSmartyを無効化してしまいます。
これが最善かどうかは微妙なところですが。。。
例えば、私の今回のケースだとこんな感じです。
{literal} {/literal}
コメントする