街中で見かけて「グッときた人」の思い出

以下のようにMETHOD=GETでCGIスクリプトにパラメータを渡してQUERY_STRINGから読み出す場合、$a_wordが日本語だと文字化けして正しく送れません。

http://~/~/wwwperl.cgi?mode=tophtml&page=$next_line&a_word=$a_word

http://~/~/wwwperl.cgi?mode=tophtml&page=10&a_word=テレビ朝日

$a_wordの「テレビ朝日」が「テ・E喞・」となってしまう。

フォームで送ればちゃんと表示されるのですが、ここはどうしてもMETHOD=GETで渡したいのです。
どなたか理由または解決方法を教えていただけると嬉しいのですが・・・
スクリプトはEUCで書いています。Jcode.pmを使用。
エンコード部分はこんな感じです。

sub decode {
my $buf;
if ($ENV{'REQUEST_METHOD'} eq "POST") {
read(STDIN, $buf, $ENV{'CONTENT_LENGTH'});
} else {
$buf = $ENV{'QUERY_STRING'};
}
foreach ( split(/&/, $buf) ) {
my ($key, $val) = split(/=/);
$key =~ tr/+/ /;
$key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;
$val =~ tr/+/ /;
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg;

Jcode::convert(\$val, 'euc');

$FORM{$key} .= "\0" if (defined($FORM{$key}));
$FORM{$key} .= $val;
}
$mode = $FORM{'mode'};
$page = $FORM{'page'};
$a_word = $FORM{'a_word'};
}

A 回答 (1件)

'テレビ朝日' を URLエンコードすると '%a5%c6%a5%ec%a5%d3%c4%ab%c6%fc' となるみたいなので、



&a_word=%a5%c6%a5%ec%a5%d3%c4%ab%c6%fc

じゃないすか?

参考URL:http://www.tagindex.com/cgi-lib/encode/url.cgi
    • good
    • 0
この回答へのお礼

そっか、URLエンコードすればいいんですね。
忘れてました。(;^_^A
ありがとうございます。m(__)m

お礼日時:2007/11/26 20:54

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!