perl:cgi
文書の過去の版を表示しています。
Perl - CGI
CGI で UTF8 を扱う
CGI モジュールと Encode モジュールを使うとよい。
#!/usr/bin/perl BEGIN { use File::Basename; chdir dirname( $0 ); } use strict; use warnings; use utf8; use open ":utf8"; use open ":std"; use CGI; use Encode; # 取得したデータを UTF8 として扱うためにデコード my $cgi = CGI->new(); foreach my $param ( $cgi->param ) { my @value = map { Encode::decode( 'utf8', $_ ) } $cgi->param( $param ); $cgi->param( $param ,@value ); }
これだけで CGI で正常に UTF8 が扱えるようになる。
CGI モジュールで取得した変数をハッシュにするには、
my %in = $cgi->Vars;
たったこれだけでよい。
Cookie の書き込みと読み込み
書き込み
#!/usr/bin/perl BEGIN { use File::Basename; chdir dirname( $0 ); } use strict; use warnings; use utf8; use open ":utf8"; use open ":std"; use CGI::Cookie; my $cookie = CGI::Cookie->new(-name => "識別子", -value => "値", -expires => "+3M"); print "Set-Cookie: $cookie\n";
-expires は有効期限を設定するもので、+3M は三ヶ月間を意味する。
読み込み
#!/usr/bin/perl BEGIN { use File::Basename; chdir dirname( $0 ); } use strict; use warnings; use utf8; use open ":utf8"; use open ":std"; use CGI::Cookie; my %cookies = fetch CGI::Cookie; my $cookie = $cookies{'識別子'}->value if ( exists $cookies{'識別子'} ); my $result = Encode::decode( 'utf8', $cookie );
存在しないクッキーを取得しようとすると致命的なエラーとなるため、必ず exists で存在を確認する。取得した値に対して UTF-8 フラグを立てることも忘れずに。
perl/cgi.1529890849.txt.gz · 最終更新: 2018/06/25 10:40 by 127.0.0.1