Зачем использовать encodeURIComponent () при записи json в cookie - PullRequest
3 голосов
/ 21 апреля 2011

В частности, при сохранении JSON в файл cookie безопасно просто сохранять необработанное значение?

Причина, по которой я не хочу кодировать, состоит в том, что json имеет небольшие значения и ключи, но сложную структуру, поэтому кодирование, заменяющее все ",: и {}, значительно увеличивает длину строки

Ответы [ 4 ]

2 голосов
/ 21 апреля 2011

Вы можете преобразовать свой объект JSON в строку, используя метод JSON.stringify (), а затем сохранить его в файле cookie.

Обратите внимание, что для файлов cookie допустимо ограничение в 4000 символов.

Если вашСтрока Json действительна, ее не нужно кодировать.

например,

JSON.stringify({a:'foo"bar"',bar:69}); => '{"a":"foo\"bar\"","bar":69}' допустимые строки Json экранированы.

2 голосов
/ 21 апреля 2011

если ваши значения содержат «символы JSON» (например, запятую, кавычки, [] и т. Д.), То вам, вероятно, следует использовать encodeURIComponent, чтобы они экранировались и не нарушали код при чтении значений обратно.

1 голос
/ 13 января 2016

Это очень хорошо задокументировано для MDN

Чтобы избежать непредвиденных запросов к серверу, вы должны позвонить encodeURIComponent на любому пользователю-введенные параметры, которые будут переданы как часть URI .Например, пользователь может ввести «Thyme & time = again» для комментария к переменной.Если вы не используете encodeURIComponent для этой переменной, вы получите комментарий = Thyme% 20 & time = снова.Обратите внимание, что амперсанд и знак равенства обозначают новую пару ключ и значение.Поэтому вместо того, чтобы иметь ключ комментария POST, равный «Thyme & time = again», у вас есть два ключа POST, один из которых равен «Thyme», а другой (time) равен снова.

0 голосов
/ 24 февраля 2012

Cookie: имя = значение; name2 = значение2

Пробелы являются частью разделения cookie в заголовке HTTP Cookie. Необработанные пробелы в значениях cookie могут запутать сервер.

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