2007年6月29日金曜日

CGIで日本語を正しく扱う方法

CGIで日本語を正しく扱うのは意外と難しい。
最近のPerl5.8ではプログラム自体の文字コードが多言語化された。それに伴い、日本語を扱うCGIでは文字コードなどを指定するプログラムを追加する必要があるため、若干複雑になる。
日本語の処理をきっちり説明した解説書も少ない。
そこで、CGIで日本語パラメータの受け渡しを行う例を示しておく。

#!c:/xampp/perl/bin/perl -w
use strict; # 安全のための制限を課す
use warnings; # 警告を出す(same as -w)
use utf8; # UTF-8で書いている
use CGI; # CGIである。
binmode STDOUT,":utf8"; # 標準出力はUTF8
my $encoding = 'utf8'; # HTMLの文字コード
my $lang = 'ja'; # 言語は日本語
my $q = CGI->new();
unless ($q->param) {
response(<<HTML);
<form method="post" action="hello-form.cgi">
あだ名 <input type="text" name="nickname" />
<input type="submit" />
</form>
HTML
exit 0;
}
my $nickname = $q->param('nickname'); # native bytes
utf8::decode($nickname); # utf8
response("こんにちは、$nickname");
exit 0;

sub response {
my ($body) = @_;
print $q->header(-type=>'text/html',-charset=>$encoding);
print $q->start_html(-title=>'Hello Perl',
-lang=>$lang,-encoding=>$encoding);
print $body;
print $q->end_html();
}

0 件のコメント: