- 締切済み
UTF-8へのエスケープ方法
ホームページに検索窓をつけてYahoo辞書を検索するようなCGIを作ったのですが、検索すると、例えば、「辞書」と入れると、キーワードが%8E%AB%8F%91と、Shift-JISでエスケープされているようなんです。 これを%e8%be%9e%e6%9b%b8と、UTF-8でエスケープするようにするのはどうすればいいんでしょうか。 こんなソースです。 初心者なのでよろしくお願いします。 #!/usr/local/bin/perl #use strict; my %engine = ( google => 'http://www.google.com/search?ie=Shift_JIS&safe=off&q=', yahoo => 'http://search.yahoo.co.jp/search?ei=SJIS&p=', kokugo => 'http://dic.yahoo.co.jp/dsearch?enc=UTF-8&stype=0&dtype=0&p=', eigo => 'http://eow.alc.co.jp/', ); my (%in); %in = map { split(/=/, $_, 2) } split(/[&;]/, $ENV{QUERY_STRING}); search($in{word}, $in{engine}); exit; sub search { my ($word, $search) = @_; # 謎の検索エンジンだったら google $search = $engine{$search} || $engine{google}; # アルクは検索語をエスケープしない if($search eq "http://eow.alc.co.jp/"){ $word =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; print qq(Location: $search$word/UTF-8/\n\n); }else{ print qq(Location: $search$word\n\n); } }
お礼
お返事ありがとうございます。 $word = Jcode->new( $word, "sjis")->utf8; の後に $word =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg; をくわえると 「あ」が%E3%81%82の表示になりました。 いろんな書き方があって難しいですね・・・ ありがとうございました。