On Sun, 04 Sep 2005 15:29:20 +0900
dune <FZH01112@...> さんwrote:
> cgi-lib.pl 内の ReadParse() が binmode(STDOUT) してるから
> use encoding 'sjis'; の文字コード変換が効かなくなってる。
> もう cgi-lib.pl は使うなってことだと思います。
cgi-lib.plは最新版の2.18を使っているつもりだったのですが、古いバージョ
ン?でした。binmode(STDOUT)していません。確かに2.18にすると文字化けします。
jperlではどっちでも関係ありませんが、無駄なものを省いて、次のようなも
のに変更しました。
sub ReadParse {
local (*in) = @_ if @_;
local ($i, $key, $val);
# Read in text
if (&MethGet) {
$in = $ENV{'QUERY_STRING'};
} elsif (&MethPost) {
read(STDIN,$in,$ENV{'CONTENT_LENGTH'});
}
@in = split(/[&;]/,$in);
foreach $i (0 .. $#in) {
# Convert plus's to spaces
$in[$i] =~ s/\+/ /g;
# Split into key and value.
($key, $val) = split(/=/,$in[$i],2); # splits on the first =.
# Convert %XX from hex numbers to alphanumeric
$key =~ s/%(..)/pack("c",hex($1))/ge;
$val =~ s/%(..)/pack("c",hex($1))/ge;
# Associate key and value
$in{$key} .= "\0" if (defined($in{$key})); # \0 is the multiple separator
$in{$key} .= $val;
}
return scalar(@in);
}
# MethGet
# Return true if this cgi call was using the GET request, false otherwise
sub MethGet {
return ($ENV{'REQUEST_METHOD'} eq "GET");
}
# MethPost
# Return true if this cgi call was using the POST request, false otherwise
sub MethPost {
return ($ENV{'REQUEST_METHOD'} eq "POST");
}
1; #return true
藤岡 和夫
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/