• ベストアンサー

クッキーの値のエンコード/デコードの理由

JavaScriptでクッキーを作成する為に『とほほ』へ行ったところ、 クッキーの値はエンコード/デコードする必要があると書かれていました。 今日まで2年間ずっと知らないままJavaScriptやCGIでクッキーの読み書き処理 をしていました。 とほほにはその詳しい理由が書かれておらず、 他のウェブサイトでも理由が見つからなかったので教えていただけたら幸いです。 やはりエンコードが必要ということは異なるOS間で不具合が起きるということで、 自分のマシンで動作チェックするだけでは不具合は発見できないということなんでしょうか? よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • ahsblue
  • ベストアンサー率58% (23/39)
回答No.1

例えば以下のデータのような場合に困るからです。 A は 「1=2」 B は 「&」 というデータをクッキーに書き込むと A=1=2&B=& で、読み込み&分解するときに 制御記号の=なのかデータの=なのか判断がつかなくなってしまいます。 そこでエンコードしたデータを用いるとデータの=や&などがコードに変換されるため正常に読み書きが可能になるっということです。

katsudon
質問者

補足

ありがとうございました。 とほほのhttp://tohoho.wakusei.ne.jp/wwwcook.htmでは、 『Cookieの値では、=や;などの特殊記号や日本語文字は %82%A0 のような形式にエンコードして記録しておき、読み出し時にこれをデコードしてやる必要があります。』 と書かれており、この"日本語文字"という言葉に『ということはOSに依存するから必要ということか?』と思ってしまいました。 では、=や&、;、スペースなどを値に使用しなければ、日本語をそのままクッキーに記録しても支障はないということでいいのでしょうか?(Windows 98/Me + IE5/6で今までそうやって来たのですが)

その他の回答 (1)

  • ahsblue
  • ベストアンサー率58% (23/39)
回答No.2

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

katsudon
質問者

お礼

大変丁寧に解説いただきありがとうございました! ということはシフトJISの文字化けと同じ問題なのですね。 では、やはり一般的なユーザを対象にするならエンコードは必須なわけですね。 各ユーザの既存のクッキーの変更をかけるのは非常に難しいですが、 少しずつエンコードされたクッキー情報に修正したいと思います。 重ねてお礼します。大変ありがとうございました!

関連するQ&A