Не работает json_encode или Почему json_encode возвращает NULL (php)
Здравствуйте. Недавно столкнулся с проблемой парсинга JSON методом json_encode.
JSON приходит правильный. неоднократно проверял, в чем проблема понять не могу.
Оказывается все очень просто (ну или почти просто). Как я понял, JSON должен иметь кодировку UTF-8. Такая ошибка возникает, если Вы отправляете JSON в другой кодировке, например в windows-1251 (cp1251).
1. При получении конвертировать данные в utf-8 при помощи iconv.
$json_obj = json_decode(iconv("windows-1251","utf-8",$_POST['json_data']));
Кстати, чтобы тип у $json_obj был не oject, а array, нужно указать в json_decode второй параметр в значение true.
$json_arr = json_decode(iconv("windows-1251","utf-8",$_POST['json_data']), true);
2. Перед отправкой данных экранировать данные методом urlencode();
Хотя в принципе нормальный упаковщик JSON должен прогонять все данные через urlencode.
3. Если Вы передаете данные целиком из БД. То переда основным запросом можно вставить:
mysql_query('SET CHARACTER SET utf8');
4. JavaScript. Я формирую JSON в JavaScript, как мне быть?
JSON приходит правильный. неоднократно проверял, в чем проблема понять не могу.
Оказывается все очень просто (ну или почти просто). Как я понял, JSON должен иметь кодировку UTF-8. Такая ошибка возникает, если Вы отправляете JSON в другой кодировке, например в windows-1251 (cp1251).
1. При получении конвертировать данные в utf-8 при помощи iconv.
$json_obj = json_decode(iconv("windows-1251","utf-8",$_POST['json_data']));
Кстати, чтобы тип у $json_obj был не oject, а array, нужно указать в json_decode второй параметр в значение true.
$json_arr = json_decode(iconv("windows-1251","utf-8",$_POST['json_data']), true);
2. Перед отправкой данных экранировать данные методом urlencode();
Хотя в принципе нормальный упаковщик JSON должен прогонять все данные через urlencode.
3. Если Вы передаете данные целиком из БД. То переда основным запросом можно вставить:
mysql_query('SET CHARACTER SET utf8');
4. JavaScript. Я формирую JSON в JavaScript, как мне быть?
Что делать, если Вы формируете данные в JS, при помощи того же JSON.stringify? Тут дело обстоит сложнее. Нужно при формировании JSON конвертировать сразу данные в UTF-8.
Пока это все, что я разузнал. Буду узнавать дальше.
p.s. А вообще, друзья-товарищи я считаю на данный момент лучше использовать на сайтах кодировку utf-8.
p.s. А вообще, друзья-товарищи я считаю на данный момент лучше использовать на сайтах кодировку utf-8.
Комментарии
Отправить комментарий