WEB/システム/IT技術ブログ

Smartyプログラムコードでshift-jisを扱ったら「syntax error」

いつものように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}
B!

Comment

コメントはありません

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives