No.3ベストアンサー
- 回答日時:
例示されているクッキーの内容から判断から、おそらくエスケープ前の文字列の文字コードがShift_JIS(もしくはJIS)である、と思われます。
それ以外は標準的なエスケープ処理だと思います。
使用ブラウザを限定するのなら、それに合った対処をすることができます。
汎用にしたい場合、Perl側もJavaScript側も複雑な処理が必要です。
これは、IE4以降およびNetscapeの最近のバージョンは、文字コード絡みの処理をUnicodeで行うように仕様が変更されたためです(ECMA準拠)。
このため、ブラウザの扱うデフォルトの文字コードが何であるかを取得し、それに応じたcookieのエンコードをする必要が生じます。
ちなみに、自前で文字コード変換関数を用意する以外の方法では、%82%74...をJavaScriptでデコードすることはできないはずです。
# Windows+(IE4以降orNetscape6以降)に限定するなら、Perl側の処理を少し変えればできます
従って、考えられる方法のとしては、
1.JavaScriptのデフォルトの文字コードを判定し、cookieにエスケープされない文字で格納しておき、それに応じた処理をする。
それに応じた処理、というのは、perl側でjcode.pmを用いてURLエンコード前に、文字コードを適切に変換する、ということです。
デフォルト文字コードの判定は、適当な2バイト文字をJavaScriptにescape()させ、その結果をみれば可能です。
2.JavaVMを利用する
Javaアプレットでjava.net.URLEncoderを使用します。
しかし、セキュリティーの関係上、クライアントがJavaVMを使用しない設定になっていることも考えられます。
3.Perlでcookieを全てデコードしてJavaScriptの変数に代入するような実行文を出力HTMLに埋め込む
JavaScript側は楽をできますが、できれば避けたい方法です。
参考URL:http://openlab.ring.gr.jp/Jcode/index-j.html
本当にありがとうございました。
プログラミングをまだ初めたての私には、これだけ
詳細に教えていただける事は、なにを差し置いても
ありがたいことです。
とにかく・・・とにかくデコード、エンコードは、
難しいこととがわかりました。
3案のうち自分でできそうな事をいま試している
ところです。
最悪どうしてもだめだったら、cookie 取得、書込み
処理のところを そっくり JavaScript に書き換えよう
と思います。。。
専門家の方にこうまで親身になって教えていただき、
心より感謝いたします。
No.2
- 回答日時:
エンコードとデコードの方法が対応していないと思われます。
例示されているエンコードはUnicode系URLエンコードではないので、unescape()ではデコードできません。
HTMLエンコードをしているのなら、それに対応するデコード関数を記述する必要があります。
JavaScriptでも制限付きで正規表現(RegExpオブジェクト)が使用できますので、PerlCGIでデコードに使用している表現を書き換えればOKです。
また、エンコード/デコードのやり方は人によって異なりますので、PerlCGIのデコードルーチンを記述された方が回答が得られやすいかと思います。
なお、上のエンコードは、cookieのルール(;はクッキーの値に現れてはならない)に反しているように思われます。
参考URL:http://www.ietf.org/rfc/rfc2965.txt
礼 ありがとうございました。
先にあげた「」のデコード文字なのですが、
カット&ペーストしたものですが、送信した後に
何故かかわってしまいました。
クッキーにかかれている文字は「 %82%74%82%6D%・・・ 」 という文字です。
一応、そのスクリプトを書いておきますが、
回答は任意で結構です。
1、2日で締め切りたいと思います。
sub setCookie {
local($tmp, $val);
$val = $_[1];
$val =~ s/(\W)/sprintf("%%%02X", unpack("C", $1))/eg;
$tmp = "Set-Cookie: ";
$tmp .= "$_[0]=$val; ";
$tmp .= $cookie_date;
# cookie 書き込み
print $tmp;
return($tmp);
}
No.1
- 回答日時:
cookieに保存できる文字には制限がありますので、2バイト文字等を格納したい場合には何らかのエンコードをする必要があります。
CGI側でその処理を行っていない/うまくいっていないためと思われますのでご確認ください。
NetscapeはURLエンコードを推奨しているようです。
参考URL:http://tohoho.wakusei.ne.jp/wwwcook.htm
この回答への補足
回答ありがとうございます。
一般にあるサンプルソースを使用して、クッキーを
書き込んでいるのすが、エンコードは行なわれている
ようです。
ただ、cgi で書き込んだエンコードをJavaScript
で読み込む際に、元に戻せない様子です。
この類はわりとよくある質問かとおもったのですが
CGI ←→ JavaScript のクッキーのやり取りの注意に
ついては、Webを検索しても、ほとんど見当たらなくて
困っています。
すみません、もうちょっと情報を待ってみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- JavaScript セレクトボックスで配列を呼び出したい。 1 2022/07/08 20:14
- 政治 私の発明した「二階建て漢字」は使えるでしょうか? 3 2023/02/08 16:40
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- SQL Server SQLについて質問です。 a表がありその表には従業員名を保存するname列があります。 LIKE演算 1 2022/05/17 17:49
- JavaScript HTMLでJavaScriptを使ってパスワードの強化判定のプログラムを作成しています。 一通り作っ 2 2022/10/19 01:41
- JavaScript gasについて 1 2022/05/31 21:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaで質問です。 文字列2023/2...
-
ダブルクォーテーションのrepla...
-
Path型をString型へ変換する(Java)
-
javascriptで文字列のsjis利用...
-
文字化けします。
-
int型のゼロ埋め
-
JIS8の半角かな文字をUnicodeの...
-
半角カナ文字の変換
-
クエリの結果とレコードセット...
-
エクセルVBAで「〜」が表現でき...
-
カタカナをローマジに変換する。
-
javaで入力したの半角カタカナ...
-
UTF-8とUnicodeの互換性
-
javaの日本語並び替えについて...
-
substring バイト単位でやりたい
-
ASCII コード表の文字から10進に
-
PerlプログラムをJavaに変換す...
-
byte[] を long,float とかに...
-
replace関数で複数の文字の変換...
-
Visual Basic でのコードをASCI...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ダブルクォーテーションのrepla...
-
javaで質問です。 文字列2023/2...
-
Path型をString型へ変換する(Java)
-
javascriptで文字列のsjis利用...
-
Visual Basic でのコードをASCI...
-
カタカナをローマジに変換する。
-
int型のゼロ埋め
-
C言語32bitから64bitの移行につ...
-
substring バイト単位でやりたい
-
UTF-8とUnicodeの互換性
-
COBOLで半角カナを全角カナに変換
-
Windows-31Jからutf-8への変換...
-
JavaのStringクラスに「外字」...
-
byte[] を long,float とかに...
-
IBM漢字コード⇒SJIS変換方法
-
エクセルVBAで「〜」が表現でき...
-
javaで「全角が含まれているか...
-
javaの初歩的な質問です。
-
クエリの結果とレコードセット...
-
[Javascript]エンターキー押下...
おすすめ情報