[Edit][Create New]
[ IndexPage / ネットとプログラミング / CGI / 便利なスクリプト片(未整理) / Param.pm ]

Param.pm

package Param;

# Last modified: Sat Mar 30 10:50:57 JST 2002

use Tool;
use Jcode;
use strict;

my $allowed_length = 50_000;

sub get{
	my($allow_method) = @_;
	my($query,$key,$data,%param);
	my($method) = $ENV{REQUEST_METHOD};

	# データ取得

	if    ($method eq 'POST'){
		my $length = $ENV{CONTENT_LENGTH};

		# メソッドチェック
		&Tool::error('Method not allowed: POST') 
			if($allow_method && $allow_method !~ /POST/i);

		# 長さチェック
		&Tool::error('文章が長すぎます: $length bytes.') 
			if ($length > $allowed_length);

		read(STDIN, $query, $length);
	}elsif($method eq 'GET'){
		# メソッドチェック
		&Tool::error('Method not allowed: GET') 
			if($allow_method && $allow_method !~ /GET/i);

		$query = $ENV{'QUERY_STRING'};
	}else{
		&Tool::error('Unknown method: $method');
	}

	foreach(split('&',$query)){
		($key,$data) = split('=',$_);
		$data =~ s/\+/ /g;
		$data =~ s/%([\dA-F]{2})/pack('C',hex($1))/egi;

		$data =~ tr/\t/ /;

		# 文字変換
		jcode(\$data)->euc;

		# EUCの正当性チェックしようよ
		$data =~ tr/\0\x7F//d;
		$param{$key} = $param{$key} 
		             ? "$data\0$param{$key}" 
					 : "$data"
					 ;
	}

	%param;
}

1;