кириллица не записывается в json файл

409
09 ноября 2017, 06:50

Есть форма. С нее получаем данные POST'ом. Эти данные записываем в json файл. Проблема: кириллица ни в какую не хочет записываться. Дамп массива в PHP нормальный - что вписали, то и выдает

а вот в json файле лежит вместо кириллицы null. PHP 5.3

$user = array(
    'name'=> $user_name,
    'lastname'=> $user_lastname,
    'mail'=> $user_mail,
    'birthday'=> $user_date,
    'phone'=> $user_phone,
    'cardnumber'=> $user_cardnumb,
);
$json = file_get_contents('card.json');
$json = json_decode($json, true); 
$json[] = $user;
$json = json_encode($json);
file_put_contents('card.json', $json);
}

Менял версию на 5.4, вставлял второй параметр $json = json_encode($json, JSON_UNESCAPED_UNICODE); - в json файле стоят простые скобки "", где должна быть кириллица.Кстати, почему-то дамп массива в PHP 5.4 с той же кириллицей выдает "", а латиницу нормально выводит

Answer 1

PHP функция json_encode работает только с UTF8 (соответствующее место в исходнике не сопровождается комментариями, а в последующих версиях и warning убран)

Обратите внимание на string(4) "Иван". Число в скобках - длина строки в байтах. Это однозначно не UTF8, для которого 4 кириллических символа занимают 8 байт, а что-то однобайтовое.

Поэтому вам необходимо или переводить код на использование UTF8 (что предпочтительнее) или конвертировать все строки в UTF8 перед использованием json_encode и, соответственно, обратно конвертировать после json_decode

READ ALSO
Почему не рисуется QDateTimeAxis?

Почему не рисуется QDateTimeAxis?

При использовании библиотеки QtCharts столкнулся с проблемой - не отрисовывается ось QDateTimeAxis в том случае, если добавление данных на график и связывание...

316
Передача потока чтения из файла в функцию C++

Передача потока чтения из файла в функцию C++

В общем, передаю поток чтения из файла в функцию, чтобы строку считала, но вадаёт ошибку:

313
Создание структур C++

Создание структур C++

Не очень понимаю, что я делаю не такПрограмма просто завершается (с кодом 0) и ничего не выводит

418
Ошибка [Error] expected primary-expression before '}' token

Ошибка [Error] expected primary-expression before '}' token

При компиляции выводит 10 48 [Error] expected primary-expression before '}' token Уже полчаса бьюсь, что делать?

300