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
▲このページのトップに戻る
▲このページのトップに戻る
▲このページのトップに戻る
▲このページのトップに戻る
▲このページのトップに戻る
9614 | JavaScript+Perl | kamikami | 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です。 |
▲このページのトップに戻る
9626 | Re:JavaScript+Perl | Area23 | 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するコード書いた方がいいんじゃないの。 |
▲このページのトップに戻る
9627 | Re:JavaScript+Perl | vice | 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 |
▲このページのトップに戻る
9694 | Re:JavaScript+Perl | kamikami | 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 と同じようなエンコード結果を得る方法をお教えください。 |
▲このページのトップに戻る
9774 | Re:JavaScript+Perl | kamikami | 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に データを渡すことができました。 いろいろ、教えていただきありがとうございました。 |
何か一言(本ページで参考になったならないを含めて残してあります)
◎:解決 ○:参考になった ×:参考にならなかった !:アドバイスあり
参考 | 回数 | 投稿日時 | 何か一言 |
---|