作者: 藤岡和夫
日時: 2005/9/04(17:57)
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/