CGI文字コードの設定
CGIにて、日本語の文字列を送信して、次のページでそれを表示する
ということを試みています。例えば、
"page A"からリンクで"page B"に飛ぶとします。
--- page A (HTML)---
<a href="http://abc.dom/index.cgi?query=$string">Link</a>
そのとき、"page B"の題名を"page A"のリンクの中から取り出すとします。
--- page B (HTML)---
<h1>$string</h1>
そこで、$stringに日本語を入れて送信したいのですが、
送信する前に、エンコードして、
--- page A (CGI)---
$string = "日本語"; # 例えば
$string =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
print "<a href=\"abc.dom?query=$string\">Link</a>";
受信した後、デコードして、
--- page B (CGI)---
$string =~ tr/+/ /;
$string =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg;
print "<h1>$string</h1>";
のようにしているのですが、うまく表示してくれません。
カーソルを"Link"に合わせると、ステータスバーには
http://abc.dom/index.cgi?query=□u□{□e...
このような文字化け?したものが表示されます。(...は続くという意味です。)
しかし、アドレスバーには
http://abc.dom/index.cgi?query=%93%FA%96%7B%8C%EA
と表示され、エンコードがなされていることが分かります。
実際に、クリックしてリンク先を見てみると、
$BF|K\8l (B
というようなわけの分からない文字列が表示されます。
ブラウザ表示は『日本語(Shift-JIS)』になっていますが、
色々と設定を変更しても同様にうまく表示されません。
エンコードやデコードをよく理解していないのかもしれませんが、
どなたか私のやっている中のバグをご指摘して頂けないでしょうか。