ひとりまとめ

もろもろのメモ

Smartyで特定の日本語文字が「syntax error: unrecognized tag:」

Smartyを使っていると、特別おかしなことをしていないハズなのに
 syntax error: unrecognized tag:
というエラーが出てしまったー。


突き詰めていくと、テンプレートに書いていた「急」という文字が原因らしい。うむー。テンプレートがSJISだからというのも発生理由らしい。
UTF-8にしたいところだけども、今回は携帯向けページなのでそれも難しい。。

同じような現象に陥って、解決されている方がいたので参考にさせていただきました。
Shift_JISでテンプレート作成時に文字化け


「ここだけどうにか回避できればOK!」ってことであれば、
{literal}急{/literal}
とすれば回避可能。しかし、この文字自体がタグの中にあって、取り除きにくいということも。。

その場合は、テンプレートを一旦SJIS以外の文字コードに置き換えて戻しちゃう という荒技をするらしい。

function pre01($buff, &$smarty)
{
return mb_convert_encoding($buff,"EUC-JP","SJIS");
}
function post01($buff, &$smarty)
{
return mb_convert_encoding($buff,"SJIS","EUC-JP");
}
$smarty = new Smarty;
$smarty->register_prefilter('pre01');
$smarty->register_postfilter('post01');
$smarty->display('index.tpl');

register_prefilter というのを使ってSmartyコンパイル前にEUC-JPにしてしまい、コンパ入りされ終わったらregister_postfilterでSJISに戻すのだとか。

文字コードに悩まされない言語圏の人がうらやましいっすー。