CGIparamJP.pm - CGI.pm wrapper for using Japanese characters
use strict; use CGI; # 必ず use CGI してから use CGIparamJP; # 次に use CGIparamJP する順序
my $workcode = "UTF8"; # 内部処理コード my $defcode = "Shift_JIS"; # 入力コードのデフォルト(自動判別失敗時)
my $cgi = new CGIparamJP(); my $entcode = $cgi->set_param_charset( $workcode, $defcode ); my $query = $cgi->Vars(); # 全クエリを読み込む
print "Content-Type: text/html\n\n"; foreach my $key ( sort keys %$query ) { my $val = $query->{$key}; print "$key : $val\n"; }
CGIparamJP.pm は CGI.pm を継承して、set_param_charset メソッドを追加します。 set_param_charset メソッド以外は通常通り CGI.pm を利用できます。
「use CGI」は必ず「use CGIparamJP」の前に置いてください。
CGI.pm がない環境の場合は、CGIparamJP.pm の独自ルーチンにより param、Vars メソッドを提供するため、「use CGI」は不要です。 ただし、この場合は CGI.pm が提供するファイルアップロード等の 仕組みは利用できません。
set_param_charset メソッドでは下記の文字コード自動判定ルールに基づいて、 クエリ変数中の文字コードを自動判別し、全てのクエリ変数を指定文字コードに 変換します。param メソッドや Vars メソッドを呼び出す前に set_param_charset メソッドを呼び出してください。
デフォルト指定した入力文字コードの他に、 フォーム中に文字コード判別用のダミーの変数を埋め込むことで ほぼ確実な文字コード判定を行います。
<INPUT TYPE="hidden" NAME="8÷4" VALUE="2±0">
各文字コードごとに、『÷』と『±』の文字番号が異なることを利用しています。 判別が可能な文字コードは以下の通りです。
日本語 JIS 日本語 Shift_JIS (CP932) 日本語 EUC-JP 韓国語 EUC-KR (CP949) 簡体字中国語 GB2312 (CP936) 繁体字中国語 BIG5 (CP950) UTF8 Latin1
または、クエリ変数 ie を利用して、文字コードを指定することも可能です。
<INPUT TYPE="hidden" NAME="ie" VALUE="Shift_JIS">
ブラウザに自動変換されない環境でのみご利用ください。
ファイルアップロードに対応しているか動作確認する
Copyright 1998-2004 Kawasaki Yusuke u-suke [at] kawa.net