人気ブログランキング |
(PHP)Smartyを使っているがShift-JISで出力したい
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 = new 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->display("hoge.tpl");
 
//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
エピゴーネンで | register_prefilterの挙動を変えるとかなしにしようぜSmartyさん
SJISページでのSmartyの使い方 | ガイドミー管理者日記
by Jehoshaphat | 2012-11-29 23:18 | PHP開発


<< (PHP)mb_send_ma... (Linux)CentOSでc... >>