Shift-JISで作られているCGIのサイトをPHP(テンプレートエンジンとしてSmarty使用)に移行してるんですが、やはり移行後もわけあってShift-JISでないとダメなようです。
で、SmartyのテンプレートファイルをShift-JISで作るとエラーが。。。
どうやら「必須」という文字がSmartyのメタ文字「{」となっちゃってるようです。
やはり、Shift-JISのファイルは作っちゃダメだなということで、テンプレートファイル、PHPファイル共にUTF-8で書き、Smartyのアウトプットフィルタを使って出力時にShift-JISに変換することとしました。
以下のような感じです。
//Smarty読み込み(ドキュメントルート外のSmartyクラスにアクセス)require_once('Smarty.class.php');
//Smartyオブジェクト作成
$smarty->template_dir = "/smarty/templates";
$smarty->compile_dir = "/smarty/templates_c";
$smarty->cache_dir ="/smarty/cache";
//アウトプットフィルタを使用し文字コード変換
$smarty->registerFilter("output","filterSjis");
ini_set("default_charset", "Shift_JIS");
//テンプレート表示
//smartyアウトプットフィルタ
function filterSjis($buff, &$smarty){
return mb_convert_encoding($buff,"SJIS","UTF-8");
}
参考サイトでは $smarty->register_outputfilter を使っているですが、Smarty3でこのメソッド使うと、"Notice: function call 'register_outputfilter' is unknown or deprecated." みたいなエラーになります。
Smarty3系からは $smarty->registerFilter(タイプ,コールバック関数); としないといけないようです。
参考:
Smartyのアウトプットフィルタを使ってみる kawama.jp