2005年8月21日日曜日

SmartyでSJISのテンプレートを使う

「Smarty SJIS」でググるといくつか有益な情報が引っかかるので、それを見て簡単に対応できました。
もっとも、途中でSmartyとは1%も関係ないところでつまづいてしまって無駄に時間を使ってしまったのですが。。。
下記の例だと、plugins_dirにprefilter.pre01.phpとpostfilter.post01.phpのファイルを設置。autoload_filtersを使って自動でフィルタがかかるようにしています。
本体

require("/path/to/smarty");
$smarty = new Smarty;
$smarty->template_dir = "/path/to/template_dir";
$smarty->compile_dir = "/path/to/compile_dir";
$smarty->plugins_dir = "/path/to/plugins_dir";
$smarty->cache_dir = "/path/to/cache_dir";
$smarty->autoload_filters = array('pre' => array('pre01'), 'post' => array('post01'));
$smarty->display("/path/to/template.tpl");


prefilter.pre01.php
<?php
function smarty_prefilter_pre01($buff, &$smarty)
{
return mb_convert_encoding($buff,"EUC-JP","SJIS");
}
?>


postfilter.post01.php
<?php
function smarty_postfilter_post01($buff, &$smarty)
{
return mb_convert_encoding($buff,"SJIS","EUC-JP");
}
?>

2 件のコメント:

  1. Smartyのアウトプットフィルタを使ってみる

    ウェブサイト(UTF-8)の登録フォームを携帯端末(SJIS)にも対応させるのを...

    返信削除
  2. SJISとかEUC-JPでmb_convert_encodingをすると文字化けますよん
    EUC-JPを使うよりはUTF-8を使ったほうが安全な気がする、、、
    http://pentan.info/php/sjiswin_eucjpwin.html

    返信削除