JavaScriptでクッキーを作成する為に『とほほ』へ行ったところ、
クッキーの値はエンコード/デコードする必要があると書かれていました。
今日まで2年間ずっと知らないままJavaScriptやCGIでクッキーの読み書き処理
をしていました。

とほほにはその詳しい理由が書かれておらず、
他のウェブサイトでも理由が見つからなかったので教えていただけたら幸いです。

やはりエンコードが必要ということは異なるOS間で不具合が起きるということで、
自分のマシンで動作チェックするだけでは不具合は発見できないということなんでしょうか?

よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

例えば以下のデータのような場合に困るからです。



A は 「1=2」
B は 「&」
というデータをクッキーに書き込むと

A=1=2&B=&

で、読み込み&分解するときに
制御記号の=なのかデータの=なのか判断がつかなくなってしまいます。
そこでエンコードしたデータを用いるとデータの=や&などがコードに変換されるため正常に読み書きが可能になるっということです。

この回答への補足

ありがとうございました。

とほほのhttp://tohoho.wakusei.ne.jp/wwwcook.htmでは、
『Cookieの値では、=や;などの特殊記号や日本語文字は %82%A0 のような形式にエンコードして記録しておき、読み出し時にこれをデコードしてやる必要があります。』
と書かれており、この"日本語文字"という言葉に『ということはOSに依存するから必要ということか?』と思ってしまいました。

では、=や&、;、スペースなどを値に使用しなければ、日本語をそのままクッキーに記録しても支障はないということでいいのでしょうか?(Windows 98/Me + IE5/6で今までそうやって来たのですが)

補足日時:2001/12/07 23:06
    • good
    • 0

OSに依存するというのも70点くらいで正解なのですが、正確には文字コードに依存します。


Windows=シフトJIS
Mac=シフトJIS?
Linux=EUC
HP-UX=シフトJIS
とOSにより標準となっている文字コードが異なります。
またこれは、標準であって設定を変更することも可能です。
ただ言えるのは英数字だけの場合は、各文字コードで共通のコードを使用するためエンコードしなくても正常に動作します。
    • good
    • 0
この回答へのお礼

大変丁寧に解説いただきありがとうございました!

ということはシフトJISの文字化けと同じ問題なのですね。
では、やはり一般的なユーザを対象にするならエンコードは必須なわけですね。

各ユーザの既存のクッキーの変更をかけるのは非常に難しいですが、
少しずつエンコードされたクッキー情報に修正したいと思います。

重ねてお礼します。大変ありがとうございました!

お礼日時:2001/12/08 23:22

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q文字列として"(ダブルコーテーション)を表示させる方法

こんにちは。文字列として、ダブルコーテーションを表示させるには、どうすればよいのか教えてください。m(__)m


例えば、
<font size="2">あいうえお</font>

というタグの「あいうえお」の部分が、セルA1にあった場合、

="<font size="2">"&A1&"</font>"という表示にしたいのです。

"2"のダブルコーテーションも文字列として表示させるには、どうすればよろしいのでしょうか。

教えてください。よろしくお願い致します。

Aベストアンサー

こんにちは~

表示形式は 「標準」 のままで、
ダブルコーテーションを、ダブルコーテーションで囲んでください。

""2""

="<font size=""2"">"&A1&"</font>"

としてみてください。

Qcookie から取り出すと文字化け

perl でクッキーに書き込んだ文字を、JavaScript
で取り出して表示させると文字化けしてしまいます。

name = getCookie("NAME");
document.write(name);

・・・とやると、「 :::‚ ‚¨‚&cent;‚&sup3;‚&ntilde; 」と、
日本語の名前が化けて表示されてしまいます。
アルファベットだと問題がないのですが、
なにか変換のようなものが必要なのでしょうか。

Aベストアンサー

例示されているクッキーの内容から判断から、おそらくエスケープ前の文字列の文字コードが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

例示されているクッキーの内容から判断から、おそらくエスケープ前の文字列の文字コードがShift_JIS(もしくはJIS)である、と思われます。
それ以外は標準的なエスケープ処理だと思います。

使用ブラウザを限定するのなら、それに合った対処をすることができます。
汎用にしたい場合、Perl側もJavaScript側も複雑な処理が必要です。
これは、IE4以降およびNetscapeの最近のバージョンは、文字コード絡みの処理をUnicodeで行うように仕様が変更されたためです(ECMA準拠)。
このため、ブラウザの扱うデフォル...続きを読む

Q