暗号化された文字列をcookieにセットした後、再びcookieにアクセスしようとすると、なぜか+などの記号が消えてしまいます。


// 暗号化された文字列をcookieにセット
$value = '97Z+RW4nquT8MroL';
setcookie("TestCookie", $value);

// cookieを表示
echo $_COOKIE["TestCookie"];

// 97Z RW4nquT8MroL と表示される

PHP5で開発を行っておりますが、このような現象はあり得るのでしょうか?

※ちなみにfirefoxでcookie(TestCookie)の内容を確認すると97Z+RW4nquT8MroLと表示されています。。。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2010/02/28 23:34:44
  • 終了:2010/03/01 19:24:48

ベストアンサー

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402010/03/01 02:20:19

ポイント52pt

勘でいうと + などの記号でおかしいなら URL エンコードなどの処理周りかな?


PHP: setcookie - Manual

クッキーの value の部分は、クッキーの送信を行う際に自動的に URL エンコードされ、またクッキーを受信した際は、自動的にデコード されてクッキー名と同じ名前の変数に格納されることに注意してください。

一応 URL エンコード・デコードを自動でやってくれるようだけど、そのあたりになんかあるのかもしれない。

具体的な回答でなくて悪いが。


Firefox 使ってるなら Live HTTP Headers アドオン使って実際にどのようなデータが渡されてるか見た方が早いかもしれない。

id:kantankeizai

なるほど、URLエンコード・デコードが自動的に行われているとは知りませんでした!お恥ずかしい限りです…それで、どんな記号に置き換えても、おかしくなってしまったのですね。

非常によく分かりました。また、LiveHTTP Headersによる確認についても、デバッグ方法として有効ですね。勉強になりました。

2010/03/01 19:22:31

その他の回答(1件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402010/03/01 02:20:19ここでベストアンサー

ポイント52pt

勘でいうと + などの記号でおかしいなら URL エンコードなどの処理周りかな?


PHP: setcookie - Manual

クッキーの value の部分は、クッキーの送信を行う際に自動的に URL エンコードされ、またクッキーを受信した際は、自動的にデコード されてクッキー名と同じ名前の変数に格納されることに注意してください。

一応 URL エンコード・デコードを自動でやってくれるようだけど、そのあたりになんかあるのかもしれない。

具体的な回答でなくて悪いが。


Firefox 使ってるなら Live HTTP Headers アドオン使って実際にどのようなデータが渡されてるか見た方が早いかもしれない。

id:kantankeizai

なるほど、URLエンコード・デコードが自動的に行われているとは知りませんでした!お恥ずかしい限りです…それで、どんな記号に置き換えても、おかしくなってしまったのですね。

非常によく分かりました。また、LiveHTTP Headersによる確認についても、デバッグ方法として有効ですね。勉強になりました。

2010/03/01 19:22:31
id:y-kawaz No.2

y-kawaz回答回数1421ベストアンサー獲得回数2262010/03/01 13:54:29

ポイント38pt

cookie名やcookie値の値はurlencodeする必要があるので、以下のようにしてやれば期待通りの動作になるかと思います。

setcookie("TestCookie", urlencode($value));

ちなみに半角スペースをurlencodeすると+になります。

なので逆に+が含まれた文字列はurldecodeされたら、その部分が半角スペースになる(質問者の言葉で言えば消える)ことになるのは当然なわけです。

id:kantankeizai
  1. をurlencodeすると半角スペースだったとは。。。なるほど、それで消えて見えてしまったわけですね。b-windさんのご回答にもありましたが、デバッグの際に、プログラム上の実装ばかりではなく、HTTPの基本的な実装についても理解を深めなければいけないことを痛感しました。

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

2010/03/01 19:24:10
  • id:b-wind
    >それで、どんな記号に置き換えても、おかしくなってしまったのですね。
    いや、普通に考えれば自動なんだから意識しなくても良いはず。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません