PHP Json_encode меняет пробелы на плюс символы +

У меня есть веб-приложение, в котором я сначала храню данные JSON в файле cookie, а затем сохраняю в базе данных каждые x секунд. Он просто открывает соединение с сервером, и сервер читает файл cookie. Он ничего не посылает с помощью POST или GET.

Пока я сохраняю файл cookie, мои данные отформатированы в порядке. Однако, когда я работаю с ним в PHP, тогда setcookie новый массив json_encoded, он заменяет пробелы символами +, а затем они отображаются в моем веб-приложении. Я не могу найти способ отключить кодировку строк для json_encode, а также метод JS для разбора этих плюсовых символов (используя jQuery.parseJSON; синтаксис синтаксиса не работает). Кто-нибудь имеет представление: S?

Solutions Collecting From Web of "PHP Json_encode меняет пробелы на плюс символы +"

Из тонкого руководства :

Обратите внимание, что часть значения cookie автоматически будет указана в urlencoded при отправке файла cookie, и когда он будет получен, он будет автоматически декодирован и назначен переменной с тем же именем, что и имя файла cookie. Если вы этого не хотите, вы можете использовать setrawcookie() вместо этого, если используете PHP 5.

Но я думаю, что вы все еще хотите, чтобы URL-адрес cookie был закодирован, вам просто нужно %20 для пробелов вместо + . Однако, urlencode :

[…] по историческим причинам, пробелы кодируются как плюсовые (+) знаки

Вы можете попробовать использовать rawurlencode для его кодирования самостоятельно:

Возвращает строку, в которой все не-буквенно-цифровые символы, кроме -_.~ , -_.~ знаком процента (%), за которым следуют две шестнадцатеричные цифры. Это кодировка, описанная в RFC 3986 […]

И затем setrawcookie чтобы установить cookie. К сожалению, ни один из decodeURI , decodeURIComponent или даже устаревшие функции decodeURIComponent JavaScript не преобразуют обратно + в пространство; так что вы, вероятно, застряли, заставляя всех чувствовать трудный путь.