#!/usr/local/bin/perl # ↑プロバイダに合わせて変更する。 # 「#!/usr/local/bin/perl」か「#!/usr/bin/perl」 # m_andor.cgi ver0.2 2003/7/16 # フォームからの入力を受け取り、or検索の整形をほどこしてからmsearch.cgiに # 検索キーワードを引き渡す中間CGIです。 # 水沢・penguin-19・和彦 # http://www.kiwi-us.com/~mizusawa/penguin/ # jcode.plが必要です。 ########### 設定開始 ############### # msearch.cgiと同じディレクトリにおいて使うことが前提です。 # その場合は以下の設定は変更する必要はありません。 # 必要な場合だけ変更してください。 # msearch.cgiの位置を相対パスで。 # 同じディレクトリなら「./msearch.cgi」とする。 $msearch = "./msearch.cgi"; # jcode.plの位置を相対パスで。 # 同じディレクトリなら「./jcode.pl」とする。 $jcode = "./jcode.pl"; ########### 設定ここまで ############### # ======================================= # メインルーチン # ======================================= # 前処理================== require $jcode; #jcode.plをリクエスト $lang = "euc"; # 出力するコード #フォームを受けとる================== &input_get ; # ゲットルーチンの呼び出し #変数の取り出し================== $q_and = $in{'query_and'}; # and検索のキーワード $q_or = $in{'query_or'}; # or検索のキーワード $num = $in{'num'}; # 表示件数の指定。なければ空でよい。 # orをカッコでくくり、and検索と合体する================== if ($q_or ne "") { #orに入力があれば $query = "$q_and ($q_or)" ; } else {# orに入力がなければandをそのまま $query = "$q_and" ; } # cgiに渡すためにURIエンコードする================== # 何せ日本語が入っているから、コレしとかないと誤動作するかも。 # でも、CGI to CGIではいらないのかなぁ? $query =~ s/(\W)/'%' . unpack('H2', $1)/eg; # ↓デバッグの時には行頭の#をとる。 # &debug ; # デバッグ用 # msearch.cgiに引き渡す。================== print "Location: $msearch?query=$query&num=$num\n\n"; exit ; # 終わり # ======================================= # 以下、サブルーチン # ======================================= # フォーム受け取りルーチン======================================= sub input_get { local ($get_txt , @get_parts , $line , $key , $val ) ; # @in{$key}はグローバル変数 if( $ENV{'REQUEST_METHOD'} eq "POST" ) { read ( STDIN, $get_txt, $ENV{'CONTENT_LENGTH'} ); # postだったらバイト数を得る } else { $get_txt = $ENV{'QUERY_STRING'}; # getだったらストリングを得る } @get_parts = split( /&/, $get_txt ); # 内容を&を目印にパーツに分ける foreach $key_val_line ( @get_parts ) { # パーツごとに名前と値を取り出す ($key, $val) = split(/=/,$key_val_line,2); # Convert %XX from hex numbers to alphanumeric $key =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge; # デコード $val =~ s/%([A-Fa-f0-9]{2})/pack("c",hex($1))/ge; &jcode'convert( *key, $lang ); # 出力するコードにあわせて変換する &jcode'convert( *val, $lang ); # @in{$key} = $val; # 変数に格納する } } # デバッグ用 sub debug { print "Content-type: text/html\n\n"; print <<"_HTML_";
生成した結果は次の通りです。msearch.cgiにペーストしてうまく検索できるかテストしてください。
$msearch?query=$query&num=$num _HTML_ exit ; }