プロが教える店舗&オフィスのセキュリティ対策術

CGI.pmで日本語をURLエンコードするとおかしくなります。
print($q->unescape($q->escape('あ')), "\n");
このコードは文字'あ'をURLエンコードしたものをURLデコードして表示するはずです。
すなわち'あ'と表示するはずです。
しかし実際には'a??'と表示されてしまいます・・・
何か他の関数をかまさないといけないのでしょうか???

A 回答 (1件)

私の環境では、 utf8 や encoding を use してる場合に単純にはできませんね。



下記は、スクリプトを UTF-8 で書いて STDOUT のコードを Windows の SJIS にする例で、正しく動作します。 CGI.pm 3.15 は utf8フラグに対応してない模様です。

#! /usr/bin/perl -w
useEncode;
useutf8;
useCGI;
binmode(STDOUT, 'encoding(Windows-31J)');
my$esc= CGI::escape('あ');
print("$esc=", decode('utf8', CGI::unescape($esc)), "\n");


再度質問される場合は、上の例の様に問題を確認できるなるべく短いスクリプト全体を書いて頂ければ解決が早いかも知れません。
    • good
    • 0
この回答へのお礼

zxcv0000さん、ご回答ありがとうございます。
ご紹介いただいた見本コードを参考に、なんとか日本語でもまともにURLエンコードできるようになりました。
しかし私は
>CGI.pm 3.15 は utf8フラグに対応してない模様です。
とのコメントが気になり、試しにCGI.pmを最新版にしてみました。
そうしたら、Encode.pmに頼らなくても日本語のURLエンコード(デコード)ができるようになっていました!!

print($q->unescape($q->escape('あ')), "\n");
このコードを実行すると'あ'と表示されるようになりました
\(^o^)/

お礼日時:2009/05/17 21:20

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