QuickForm と 文字コード
この間から続いて、HTML_QuickForm。
HTML_QuickForm_Controller はちょっと重い(っていうかそこまでのものはあまり作ってない。趣味だし)ので、HTML_QuickForm+Smarty を使ってみる。
で、文字コードの部分が少し厄介。
以下のようなディレクティブにしておき、
mbstring.detect_order no value入出力文字コード=SJIS、テンプレHTMLをSJISにしようとした場合、内部的にはEUCJPなので、プログラム的な変換が必要になるのだが、これがなかなかうまくいかない感じ・・・。
mbstring.encoding_translation Off
mbstring.func_overload 0
mbstring.http_input pass
mbstring.http_output pass
mbstring.internal_encoding EUCJP
mbstring.language Japanese
mbstring.substitute_character no value
HTML_QuickForm 内で $POST(或いは$GET)から値を引っ張ってきているのだが、applyFilterとかも使ってみたのだが、なかなかうまく動かなかった・・・。
Smarty単体だと、
function get_smarty_prefilter($source,&$smarty){みたいな感じでうまくいくのだが・・・。
return mb_convert_encoding( $source, mb_internal_encoding(), 'SJIS');
}
function get_smarty_outputfilter($source,&$smaty){
return mb_convert_encoding( $source, 'SJIS', mb_internal_encoding());
}
・・・
$smarty = new Smarty();
$smarty>register_prefilter('get_smarty_prefilter');
$smarty>register_outputfilter('get_smarty_outputfilter');
結局、処理の始めに、
mb_convert_variables('EUCJP', "ASCII,JIS,UTF8,EUCJP,SJIS", $POST );を入れることで対応。
ってこれでいいのか?
$POSTを書き換えるのはものすごく抵抗がある。
ってさ、素直に出力ページとかもEUCJPに統一してもいいのかな。
確認してみたのだが、mantisの日本語ページとかもEUCJPで出力されているっぽいし。
でも出力をSJISで抑えておかないと、携帯コンテンツとかで泣くハメになるんだよね。
それからデザイナーからHTMLページをもらう場合、SJISってことがしばしある(事前に通知してればいいだけだけど)んで、SJIS出力にこだわっていたのだけども。