Кириллические символы из файла cookie javascript для вывода php через $ _COOKIE - PullRequest
1 голос
/ 02 апреля 2010

Когда я пытаюсь поместить русский текст в cookie через javascript, а затем вывести его через php, он возвращает:

% u043F% u0440% u043E% u0432% u0435% u0440% u043A% u0430

Как декодировать это в нормальные символы кириллицы?

Это функция, которую я использую для передачи в document.cookie:

function setCookie(c_name,val,c_expiredays,c_path,c_domain,c_secure)
{
    var exdate=new Date();
    exdate.setDate(exdate.getDate()+c_expiredays);
    document.cookie=c_name+ "=" +escape(val)+

    /* Additional settings */

((c_path)? "; Path =" + c_path: "") + ((c_domain)? "; domain =" + c_domain: "") + // используется для разрешения использования только в определенном домене ((c_secure)? "; secure": "") + // используется для HTTPS (SSL)

    ((c_expiredays==null) ? "" : ";expires="+exdate.toGMTString());
}

SetCookie ( 'имя', $ (это) .val (), 1);

На стороне сервера я вывожу так:

(isset($_COOKIE['img_href_value']) ? $_COOKIE['img_href_value'] : '')

Ответы [ 2 ]

2 голосов
/ 02 апреля 2010

Вы не можете помещать не-ASCII символы непосредственно в cookie (что происходит, если вы пытаетесь измениться, зависит от каждого браузера, и многие из них искажают результаты безвозвратно).

Таким образом, вы должны выбрать кодировку для использования в значениях cookie. Неважно, что, если ваш клиентский JavaScript и серверный PHP согласовывают одну кодировку. URL-кодирование, безусловно, является популярным выбором схемы кодирования для этой цели, но оно не требуется никаким стандартом, и инструменты не будут автоматически его декодировать.

  • Чтобы извлечь символы из значения cookie в кодировке URL, необходимо вручную вызвать rawurldecode для значения в конце PHP или decodeURIComponent для извлечения из document.cookie в конце JavaScript.

  • Для кодирования в этот формат соответствующие функции: rawurlencode на стороне PHP и encodeURIComponent на JavaScript.

  • (Предполагается, что вы используете UTF-8 для своих строк, которым вы должны быть.)

Не использовать urlencode для этого в PHP (это только для параметров отправки формы и в этом контексте неправильно вводит пробел), и определенно не использовать escape в JavaScript (все неправильные символы, отличные от ASCII, получаются неправильными из-за странного нестандартного формата %uNNNN, который вы цитировали).

(В общем, JS escape / unescape - это древняя и очень сомнительная схема кодирования, которую вы почти никогда не должны использовать.)

1 голос
/ 02 апреля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...