Hatena::ブログ(Diary)

放浪するエンジニアの覚え書き このページをアンテナに追加 RSSフィード

2008-10-23 PHP, YUI

SmartyのUTF-8対応

| 08:52 |  SmartyのUTF-8対応 - 放浪するエンジニアの覚え書き のブックマークコメント

Smartyは、PHPのデファクトのテンプレートエンジン。

MVCでプログラムを書こうと思ったら利用しない手はない。

最新版を本家サイトからダウンロードしてみると、2.6.20が最新版。

SmartyUTF-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");
}
?>