電子書籍の厳選無料作品が豊富!

「テスト」を以下でデコードすると「繝・せ繝・」となってしまいます。

URL
test.cgi/q_テスト/

$ENV{'PATH_INFO'}と「q_テスト」を使うことを前提として、「テスト」と正常に取る方法はありますでしょうか。
ご教授お願いします。

$buffer = $ENV{'PATH_INFO'};
$buffer = substr($buffer,1);
@lens = split(/\//,$buffer);
foreach $len(@lens){
($name, $value) = split(/_/,$len,2);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value,'sjis');
$value =~ s/\t/ /g;
$value =~ s/\n//g;
$FORM{$name} = $value;
}

A 回答 (3件)

>実はURLエンコードしているのですが、


>そのURLをメールで送った場合、
>それをクリックするとアドレスが自動的に
>日本語になってしまうため、
>このような問題が起こっています。

これを回避したいのであれば、ブラウザの知らない独自の変換方法を使用すれば大丈夫な気がします。

s/(.)/sprintf("%02.x",ord($1))/eg;
送るときこんな感じに変換して、

s/(..)/pack("C", hex($1))/eg;
受け取るときこんな感じにすれば問題ないのでは?

この方法ならブラウザが勝手に文字コードを変換することもないだろうから、受け取るときに文字コードをきめうちにできるし。
(文字コードの誤認がない)
    • good
    • 0
この回答へのお礼

なるほど。ありがとうございました!

お礼日時:2004/04/22 15:37

> 「テスト」を以下でデコードすると「繝・せ繝・」となってしまいます。



ということは、「テスト」は「UTF-8」にエンコードされているということです。しかし、jcode.pl は UTF-8 に対応していないので、変わりに Jcode.pm か Encode.pm を使う必要があります。

もし、Perl のバージョンが 5.8.0 以上なら、標準モジュールの Encode.pm が使えます。それより前のバージョンなら、Jcode.pm を使ってください。

Jcode.pm についてはこちらを参照してください。
 # Jcode.pm 作者のページ
 http://openlab.ring.gr.jp/Jcode/index-j.html
 # Jcode.pm の日本語ドキュメント
 http://perldoc.jp/docs/modules/Jcode-0.82/Jcode. …

Encode.pm についてはこちら。
 # Encode - 文字コードの変換
 http://search.cpan.org/~dankogai/Encode-1.99/Enc …
 # Encode::Guess - 文字コードの調査
 http://search.cpan.org/~dankogai/Encode-1.99/lib …

Encode を利用した例
・スクリプトの先頭に下記を追加
 use Encode qw/from_to/;
 use Encode::Guess qw/shiftjis euc-jp 7bit-jis utf8/;
・質問のコードの一部を変更
 &jcode'convert(*value,'sjis');
     ↓
 my $enc = guess_encoding($value);
 if (ref $enc) {
   from_to($value, $enc->name, 'shiftjis');
 }
※スクリプトの字下げに全角空白を使っているので、コピーする場合はタブなどに変換してください。

# Jcode は使ったことがないのでサンプルは書けませんが、ほとんど jcode.pl と同じ感覚で使えるようです。

参考URL:http://openlab.ring.gr.jp/Jcode/index-j.html,http://search.cpan.org/~dankogai/Encode-1.99/Enc …
    • good
    • 0
この回答へのお礼

なるほど。ありがとうございました!

お礼日時:2004/04/22 15:37

URLに日本語は使わないほうがいいと思われ。


日本語ドメインとかあったような気もするが・・・どっちにしてもねぇ。

どうしても引数で与えなきゃならん場合はURLエンコードすべきかと。

少なくとも当面は。

この回答への補足

ありがとうございます。
実はURLエンコードしているのですが、そのURLをメールで送った場合、それをクリックするとアドレスが自動的に日本語になってしまうため、このような問題が起こっています。
これはどうしようもないのでしょうか。。。

補足日時:2004/04/20 09:18
    • good
    • 0

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