CGI::Application + Tempalte-Toolkit メモ
CGI::Application で TT2 を使うときのメモ。
TT2の設定
Template::Provider::Encoding と Template::Stash::ForceUTF8 を使うようにしておく。
use CGI::Application::Plugin::TT; use Template::Provider::Encoding; use Template::Stash::ForceUTF8; __PACKAGE__->tt_config(TEMPLATE_OPTIONS => { LOAD_TEMPLATES => [ Template::Provider::Encoding->new ], STASH => Template::Stash::ForceUTF8->new, } );
文字コード設定
Content-type を指定しておく。
あと、CGI.pm は文字コードまで面倒を見てくれないので、setup あたりで自力でデコードする。
ちなに、use encoding していると $q->param の戻り値にUTF-8フラグが立つが、1 byte ごとに chr を通した結果なので、やめておいたほうが無難。*1
use constant APP_ENCODING => 'utf8'; sub setup { my $self = shift; my $q = $self->query; $self->header_props(-type => 'Content-type: text/html; charset=' . APP_ENCODING); for my $p ($q->param) { my @v = map { Encode::decode(APP_ENCODING, $_) } $q->param($p); $q->param($p, @v); } // do something }
なんか、もっといい方法もあるような気がするけど。とりあえずこんな感じで。