人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

// 97Z RW4nquT8MroL と表示される

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

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


●質問者: emegane
●カテゴリ:インターネット ウェブ制作
✍キーワード:cookie echo firefox アクセス 文字列
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●52ポイント ベストアンサー

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


PHP: setcookie - Manual

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

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

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


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

◎質問者からの返答

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

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


2 ● y-kawaz
●38ポイント

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

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

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

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

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ