ユーザ用ツール

サイト用ツール


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;

たったこれだけでよい。

書き込み

#!/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