SmartyのUTF-8対応
Smartyは、PHPのデファクトのテンプレートエンジン。
MVCでプログラムを書こうと思ったら利用しない手はない。
最新版を本家サイトからダウンロードしてみると、2.6.20が最新版。
SmartyのUTF-8対応でちょっとてこずったので、覚書に書いておく。
Smarty(2.6.20)を使う上での原則は、
ということらしい。つまり、Smartyクラスを、euc-jpで使っているよ、とだますということ。
そうしないと、テンプレートに渡した文字列が化けてしまう。
渡した文字列の文字化けを解消するには、前者にはSmartyのprefilter機能、後者にはpost機能を使えばよい。
$sObj = new Smarty(); $sObj->autoload_filters = array('pre' => array('pre'),'post' => array('post'));
とSmartyオブジェクトに対して設定するのだが、これと同時に、Smarty/pluginsにprefilter.pre.php、postfilter.post.phpを作成して、それぞれ以下のようにする。
・prefilter.pre.php
<?php function smarty_prefilter_pre($buff, &$mizunara) { return mb_convert_encoding($buff,"EUC-JP","UTF-8"); } ?>
・postfilter.post.php
<?php function smarty_postfilter_post($buff, &$mizunara) { return mb_convert_encoding($buff,"UTF-8","EUC-JP"); } ?>