Webコンサルタントの愚痴とアジャイル,生産性向上,Trac,オープンソースなどの与太話
追記。うまくいかない場合は
・php.iniのmbstring.language=japaneseの行を有効にすること
・もしくはソース先頭でmb_language(’Japanese’);を挿入すること。
上記が完了したら、template_cディレクトリを空にして画面に再アクセスする。
Smartyにおいては、テンプレートのコンパイル前の処理に割り込むようなユーザ定義関数の作成が可能なので、以下のような変換のための関数をまず作成する。
これをpre-filterという。
function convert_encoding_to_euc_jp
($template_source, &$smart) {
if (function_exists("mb_convert_encoding")) {
$enc = mb_detect_encoding($template_source, "auto");
if ($enc != "EUC-JP") {
return mb_convert_encoding(
$template_source, "EUC-JP", $enc);
}
}
return $template_source;
}
このような関数を作っておき、Smartyを呼び出している側のソースにおいて、
$smarty->register_prefilter("convert_encoding_to_euc_jp");
と呼び出す。
また一方で、post-filterといって、画面がコンパイルされた後の処理で割り込みをかけることも可能で、その場合は、
$smarty->register_postfilter("関数名");
とすれば良い。これは例えば、iモードサイトなどのように出力がShift_JISでなければならないような場合、画面出力前にShift_JISに変換してあげるために利用する。
pre-filterとpost-filterは同時に動作させることが可能で、登録した順に上から実行される。
コメントはありません。是非コメントしてください。