Русские символы JSON в PHP и в Javascript

Здравствуйте!

Ситуация такая:
Преобразую массив в json на php. Получившийся json записываю в куки.
В яваскрипте считываю куку, преобразую в объект, меняю одно значение массива, преобразую обратно в json и сохраняю обратно в куку.
На сервере исправленную куку читаю, преобразую в массив, но значение на русском не преобразовывается в читаемый вариант.

Сначала на сервере:
$data = array(
            "area_city" => $area_city,
            "area_code" => $val['area_code'],
            "area_phone" => $val['area_phone'],
            "area_confirm" => '0' 
          );
$area_json = json_encode($data);
setcookie ('user_area', $area_json);
Потом на яваскрипте:
$('.confirm_yes').click(function(){
    // получим куку
    user_area = getCookie('user_area');
    // если кука существует
    if ( user_area != null ) {
      // парсим куку
      user_area_ar = $.parseJSON(user_area);
      // назначаем время жизни куки
      expires = new Date();
      expires.setDate( expires.getDate() + 7 );
      user_area_ar["area_confirm"] = "yes";
      // формируем куку
      user_area = JSON.stringify(user_area_ar);
      delCookie('user_area');
      setCookie ('user_area', user_area, expires.toUTCString(), '/', window.location.hostname, null);
    }
  });
Кука перед преобразованием, прочитанная яваскриптом, имеет вид:
{"area_city":"\u0411\u0435\u043b\u0433\u043e\u0440\u043e\u0434","area_code":"878","area_phone":"987+654+87","area_confirm":"0"}
Кука, прочитанная php после преобразования ее яваскриптом, имеет вид:
{"area_city":"%u0411%u0435%u043B%u0433%u043E%u0440%u043E%u0434","area_code":"878","area_phone":"987 654 87","area_confirm":"yes"}
Получается так, что русское значение json не преобразуется обратно в читаемый вид.
Посоветуйте, пожалуйста, как этого избежать?
Михаил
11 февраля 2015, 18:22
modx.pro
4 802
0

Комментарии: 4

closure
12 февраля 2015, 00:51
+1
Смотрите php.net/manual/ru/json.constants.php JSON_UNESCAPED_UNICODE. Если php >= 5.4, то вам поможет
$data = json_encode($data, JSON_UNESCAPED_UNICODE);
    Михаил
    12 февраля 2015, 11:36
    0
    Спасибо, помогло)
    Николай
    12 февраля 2015, 12:20
    0
    $area_json = json_encode($data);
    $modx->fromJSON
    $modx->toJSON
    Пользуясь этим на стороне сервера я не думаю о кодировке. Ну это так, для расширения кругозора.
      Михаил
      12 февраля 2015, 12:28
      0
      Спасибо, кругозор расширил)
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      4