Firefox is following the real spec and does not decode '+' to space...in fact it further encodes them to '%2B' to store the cookie. If you read a cookie using javascript and unescape it, all your spaces will be turned to '+'.
To fix this problem, use setrawcookie and rawurlencode:
<?php
setrawcookie('cookie_name', rawurlencode($value), time()+60*60*24*365);
?>
The only change is that spaces will be encoded to '%20' instead of '+' and will now decode properly.
PHP.mk документација
setrawcookie
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Патека
function.setrawcookie.php
Локална патека за оваа страница.
Извор
php.net/manual/en
Оригиналниот HTML се реупотребува и локално се стилизира.
Режим
Прокси + преведен приказ
Кодовите, табелите и белешките остануваат читливи во истиот тек.
Референца
function.setrawcookie.php
setrawcookie
Референца за `function.setrawcookie.php` со подобрена типографија и навигација.
Белешки од корисници 2 забелешки
admin at eexit dot net ¶
20 години пред
subs на voracity dot org ¶
19 години пред
setrawcookie() isn't entirely 'raw'. It will check the value for invalid characters, and then disallow the cookie if there are any. These are the invalid characters to keep in mind: ',;<space>\t\r\n\013\014'.
Note that comma, space and tab are three of the invalid characters. IE, Firefox and Opera work fine with these characters, and PHP reads cookies containing them fine as well. However, if you want to use these characters in cookies that you set from php, you need to use header().