JavaScript+Perl



◇-JavaScript+Perl-kamikami(8/29-19:14)No.9614
 ┣Re:JavaScript+Perl-Area23(8/29-21:20)No.9626
 ┗Re:JavaScript+Perl-vice(8/29-21:22)No.9627
  ┣Re:JavaScript+Perl-kamikami(8/30-19:34)No.9694
  ┗Re:JavaScript+Perl-kamikami(8/31-10:14)No.9774

▲このページのトップに戻る
9614JavaScript+Perlkamikami 8/29-19:14

メーカー名:東芝
OS名:WindowsMe
パソコン名:DynaBook
ソフト名:IE6
--
JavaScriptでlocation.hrefを使って直接CGIにデータを渡し、Perlでデータを
convertしても文字化けしてしまいます。
変換方法を教えて下さい。

JavaScript
escape命令で文字列をURLコーティングした後、location.hrefを使って直接C
GIにデータを渡す。

Perl
&jcode'convert(*name, 'SHIFT-JIS')でデータをconvert。

出力されたデータが文字コードであらわれる。
いぬ → %u3044%u306C
ねこ → %u306D%u3053
こんにちは → %u3053%u3093%u306B%u3061%uFF4A%u306FV

サーバーのOSはLinux 2.2です。

▲このページのトップに戻る
9626Re:JavaScript+PerlArea23 8/29-21:20
記事番号9614へのコメント
kamikamiさんは No.9614「JavaScript+Perl」で書きました。
>OS名:WindowsMe
>パソコン名:DynaBook
>ソフト名:IE6
>JavaScriptでlocation.hrefを使って直接CGIにデータを渡し、Perlでデータを
>convertしても文字化けしてしまいます。
>変換方法を教えて下さい。
>
>JavaScript
>escape命令で文字列をURLコーティングした後、location.hrefを使って直接C
>GIにデータを渡す。
>
>Perl
>&jcode'convert(*name, 'SHIFT-JIS')でデータをconvert。
>
>出力されたデータが文字コードであらわれる。
>いぬ → %u3044%u306C
>ねこ → %u306D%u3053
>こんにちは → %u3053%u3093%u306B%u3061%uFF4A%u306FV
>
>サーバーのOSはLinux 2.2です。

CGIにデータを渡すんなら、CGI側に
JavaScriptでunescape()を使って、
先にURL形式からDecodeするコード書いた方がいいんじゃないの。

▲このページのトップに戻る
9627Re:JavaScript+Perlvice 8/29-21:22
記事番号9614へのコメント
現在のescape関数は、UnicodeをURLエンコードした文字列を返すので、
Unicodeを扱えないjcodeでは変換できません。
さらに%XX%XX形式ではなく%uXXXXという形式にエンコードするので
$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))//eg;
↑のような一般的な操作ではUnicodeにすら戻せません。

JavaScript側で対応するのは難しそうなので、
Perl側で
“URLエンコードされた文字列をUnicodeに戻してから、
さらにUnicodeからSJISに変換する”
というルーチンを作る必要があると思います。
変換テーブルが必要ですが。

↓こんな方法もあるようです。
http://tohoho.wakusei.ne.jp/wwwxx017.htm
http://www02.so-net.ne.jp/~komori/doc/js/escape.html

▲このページのトップに戻る
9694Re:JavaScript+Perlkamikami 8/30-19:34
記事番号9627へのコメント
viceさんは No.9627「Re:JavaScript+Perl」で書きました。
>現在のescape関数は、UnicodeをURLエンコードした文字列を返すので、
>Unicodeを扱えないjcodeでは変換できません。
>さらに%XX%XX形式ではなく%uXXXXという形式にエンコードするので
>$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))//eg;
>↑のような一般的な操作ではUnicodeにすら戻せません。
>
>JavaScript側で対応するのは難しそうなので、
>Perl側で
>“URLエンコードされた文字列をUnicodeに戻してから、
>さらにUnicodeからSJISに変換する”
>というルーチンを作る必要があると思います。
>変換テーブルが必要ですが。
>
>↓こんな方法もあるようです。
>http://tohoho.wakusei.ne.jp/wwwxx017.htm
>http://www02.so-net.ne.jp/~komori/doc/js/escape.html
>
>
>
詳しく説明していただき、ありがとうございました。

IE でも Netscape と同じようなエンコード結果を得る方法を教えていただいたの
ですが、私の頭脳のレベルでは応用ができませんでした。


JavaScript
yourName =escape( prompt("あなたの名前を入れて下さい。",""));
theURL = "xxxxx.cgi?&name="+yourName;
location.href = theURL;

Perl
$name = $in{'name'};
&jcode'convert(*name, 'SHIFT-JIS');


上記の場合は、どのようにすればよいのでしょうか?
Netscape と同じようなエンコード結果を得る方法をお教えください。

▲このページのトップに戻る
9774Re:JavaScript+Perlkamikami 8/31-10:14
記事番号9627へのコメント
viceさんは No.9627「Re:JavaScript+Perl」で書きました。
>現在のescape関数は、UnicodeをURLエンコードした文字列を返すので、
>Unicodeを扱えないjcodeでは変換できません。
>さらに%XX%XX形式ではなく%uXXXXという形式にエンコードするので
>$val =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("c", hex($1))//eg;
>↑のような一般的な操作ではUnicodeにすら戻せません。
>
>JavaScript側で対応するのは難しそうなので、
>Perl側で
>“URLエンコードされた文字列をUnicodeに戻してから、
>さらにUnicodeからSJISに変換する”
>というルーチンを作る必要があると思います。
>変換テーブルが必要ですが。
>
>↓こんな方法もあるようです。
>http://tohoho.wakusei.ne.jp/wwwxx017.htm
>http://www02.so-net.ne.jp/~komori/doc/js/escape.html
>
>
>
>
解決しました。

JavaScriptからPerlにデータを直接渡すのには、escape命令で文字列をURLコ
ーティングしてからでないとできないと思っていたため、変換に苦労してしまいま
した。

%XX%XX形式でPerlにデータを送れればUnicodeに戻してからSJISに変換することが
できるのですが、
能力不足で%uXXXX%uXXXX形式を%XX%XX形式に変換できませんでした。

結論
escape命令を使わずに、文字列をURLコーティングしてJavaScriptからPerlに
データを渡すことができました。


いろいろ、教えていただきありがとうございました。

A1.本ページは参考になりましたか? 又はアドバイスがありますか?
解決 参考になった 参考にならなかった アドバイスする

A2.何度目の訪問ですか?
初めて来た   数度目(2〜4) 5回以上来ている   管理人:

A3.何か一言どうぞ(アドレスは書くことができません)

A4.アドレスがあればどうぞ(1つまで)


↑↑↑↑よろしければ押してください↑↑↑↑

何か一言(本ページで参考になったならないを含めて残してあります)
◎:解決 ○:参考になった ×:参考にならなかった !:アドバイスあり

参考回数投稿日時何か一言