CGI.pmでのパラメタの調整
2006-08-30-1
[Programming]
PerlのCGI.pmで、渡されたパラメタの調整。
文字コード指定された検索URLを一つのURLに集約したい。
こんな感じでいいのかな。
実行例:
delete() したり param() で置き換えたりして、
最終的に url() でURL文字列作成。
で、"Location: " で飛ばしたりする予定。
また、デフォルトだと "&" の代わりに ";" が使われるのだが、
"-oldstyle_urls" を指定すれば大丈夫。
文字コード指定された検索URLを一つのURLに集約したい。
こんな感じでいいのかな。
#!/usr/bin/perl use strict; use warnings; use CGI qw(-oldstyle_urls); my $q = new CGI; print $q->url(-path_info => 1, -query => 1)."\n"; print $q->url(-path_info => 1, -query => 1)."\n" if (param_ie_convert($q)); use Jcode; sub param_ie_convert { my ($q) = @_; my $key = $q->param('key'); my $ie = $q->param('ie'); return unless defined $ie; $q->delete('ie'); return unless (defined $key and $key =~ /[\x80-\xff]/); return unless ($ie =~ /^(euc|sjis)$/); $q->param(-name=>'key', -value=>Jcode->new($key, $ie)->utf8); return 1; }
実行例:
% a.pl 'key=%b9%e7%bd%c9&ie=euc&dummy=foo' http://localhost/./jcc.cgi?key=%B9%E7%BD%C9&ie=euc&dummy=foo http://localhost/./jcc.cgi?key=%E5%90%88%E5%AE%BF&dummy=foo
delete() したり param() で置き換えたりして、
最終的に url() でURL文字列作成。
で、"Location: " で飛ばしたりする予定。
また、デフォルトだと "&" の代わりに ";" が使われるのだが、
"-oldstyle_urls" を指定すれば大丈夫。