2016-02-26 17 views
0

У меня есть URL-адрес, который содержит '!' в значении параметра запроса. Я enocode строку param в файлах cookie и загружаю связанную страницу. От PHP:Использование файлов cookie для передачи URL-строки param

foreach ($_GET as $key => $value){ 
    setcookie($key,$value,time()+60,'/'); 
} 

В соответствующей странице, значение куки (прочитать JavaScript/JQuery $ .cookie ("")) имеет '!' закодировано как% 21.

Может кто-нибудь сказать мне, почему '!' был закодирован? Разве это не допустимый символ в значении cookie?

+0

На передней панели вы можете использовать 'decodeURIComponent ('% 21')', который равен '!' –

ответ

0

Есть два места, в которых данные могут быть закодированы. Во-первых, когда он извлекается из массива $_GET, $value может быть закодирован и может быть декодирован с использованием . Второе место, где может происходить кодирование, - это использование setcookie(); чтобы избежать этого, вместо этого используйте setrawcookie(), который установит необработанный файл cookie вместо кодированного файла cookie.

foreach ($_GET as $key => $value){ 
    setrawcookie($key, rawurldecode($value), time() + 60, '/'); 
} 
0

Может кто-нибудь сказать мне, почему '!' был закодирован? Разве это не допустимый символ в значении cookie?

См. this answer. Согласно RFC 6265, ! является допустимым символом в имени и значении cookie. Если php кодирует !, это означает, что это ошибка.

Чтобы исправить это, вы можете делать то, что @Andrew предложил или использовал библиотеку под названием js-cookie, которая позволяет перехватывать чтение файлов cookie с помощью converters, тогда вы можете вернуть кодировку, которую делает PHP на клиенте.

Смежные вопросы