※ ChatGPTを利用し、要約された質問です(原文:METHOD=GETでパラメータを渡す時に日本語が文字化けする。)
METHOD=GETでパラメータを渡す時に日本語が文字化けする解決方法
このQ&Aのポイント
METHOD=GETでCGIスクリプトにパラメータを渡す際、日本語が文字化けして正しく送れない問題が発生しています。
フォームで送れば正しく表示されるが、METHOD=GETで渡したい場合に問題が発生します。
解決方法について知識をお持ちの方がいらっしゃいましたら、教えていただけると助かります。
METHOD=GETでパラメータを渡す時に日本語が文字化けする。
以下のように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'};
}
お礼
そっか、URLエンコードすればいいんですね。 忘れてました。(;^_^A ありがとうございます。m(__)m