したがって、PHP と Cookie に関する私の理解から、setcookie()
関数を使用すると、自動的に URL エンコードされた Cookie が取得されます。そして、$_COOKIE
配列に移動すると、自動的に URL がデコードされた Cookie が返されます。問題は、 を調べたときに Cookie を 2 回デコードしているように見えることです$_COOKIE
。
値が "Name|ID|Email" の Cookie があるとします。たとえば、次のようになります。
Joe|123|my+email@somewhere.com
これは次のようにエンコードされます。
Joe%7C123%7Cmy%2Bemail%40somewhere.com
プラス記号がエンコードされていることに注意してください。理論的には、デコードすると元に戻るはずです。これは で自動的に行われる$_COOKIE
ため、元の状態に戻す必要があります。しかし、代わりに、私は戻ってきています:
Joe|123|私のメールアドレス@somewhere.com
プラスがあったスペースに注目してください。urldecode()
これは、Cookieで追加を実行した場合に期待することです。しかし、そうではないので、プラスの代わりにスペースを取得する理由がわかりません。
もう一つの興味深いひねり。ページを更新すると、正しい出力が生成されるようです。なぜこのように振る舞うのか、何か考えはありますか?
参考までに、初期 Cookie を設定するには、javascript とescape()
スクリプトを使用してエンコードされた文字列を生成します。これは、javascript と PHP の間の引き継ぎの問題でしょうか?
考えをいただければ幸いです。