Не работает 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, как мне быть?


Что делать, если Вы формируете данные в JS, при помощи того же JSON.stringify? Тут дело обстоит сложнее. Нужно при формировании JSON конвертировать сразу данные в UTF-8.

Пока это все, что я разузнал. Буду узнавать дальше.

p.s. А вообще, друзья-товарищи я считаю на данный момент лучше использовать на сайтах кодировку utf-8.

javascript, php

Комментарии

Популярные сообщения из этого блога

Как преобразовать строку в массив в ClickHouse / How to transform string to array in ClickHouse

Как разложить массив на несколько строк в ClickHouse

Экспорт одной таблицы базы данных или mysqldump одной таблицы (MySQL)