JavascriptでURLエンコードした文字列をperlでデコードする
Ajaxで日本語文字列パラメータに含んで、サーバとやり取りする場合、日本語文字列はURLエンコードする必要があります。
これは、サーバ側のCGI(perl)だと、CGI.pmは自動的にデコードしてくれないので、Jcodeを使ってデコードします。
use Jcode;・・・
sub utf_unescape
{
my ($str) = @_;
$str =~ tr/+/ /;
$str =~ s/%u([0-9A-Fa-f]{4})/Jcode->new(pack("H4",$1), "ucs2")->sjis/eg;
$str;
}
これはsjisの例です。ブラウザによっては、JavascriptがUTF-16でエンコードしないものがあるようですが、その場合はCGI.pmがすでにデコードしてくれています。