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に戻すのだとか。
文字コードに悩まされない言語圏の人がうらやましいっすー。