json_encode возвращает пустой результат

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

Читаю темы про пустые json_encode() результат, и обнаружил, что аналогичная проблема была для многих людей, и было решение с кодированием данных. Но все мои файлы, таблицы и данные обычно в кодировке UTF-8 как локально, так и на удаленном сервере.

Все, что делает мой PHP-скрипт — это запрос записей из базы данных (я использую библиотеку PDO и устанавливаю кодировку базы данных в UTF-8 — «SET NAMES ‘utf8’»), затем создаю цикл, который генерирует HTML-теги с данными из базы данных, а затем возвращает обратно как массив с json_encode($result),

Если я попытаюсь print_r($result) и смотреть их в браузере Developer tools Я увижу правильный массив с нормальными данными. Но если я верну их с json_encode($result) результат будет — ничего.

Также у меня есть русский текст в моем массиве результатов.

Пример массива результатов:

[data] => Array
(
[0] => Array
(
[0] => <input type="checkbox" name="id[]" value="1">
[1] => 1
[2] => Английский стол
[3] => <span title='Вращающийся английский стол с выдвижными ящиками.Англия, 1900-е гг.Красное дерево, мягкая кожа диска, передвигается на бронзовых колесиках.Диаметр 91, высота 71 см.'>Вращающийся английский стол с выдвижными ящиками.<br>Англия, 1900-е гг.<br>Красное дерево, мягкая кожа диска, перед...</span>
[4] => 250&euro;
[5] => sss
[6] =>
[7] => <span class="label label-sm label-success">Опубликован</span>
[8] => <a href="/jc_adm/?p=edit_product&id=1" class="btn btn-xs default btn-editable"><i class="fa fa-pencil"></i> Редактировать</a>
)

[1] => Array
(
[0] => <input type="checkbox" name="id[]" value="2">
[1] => 2
[2] => Старинный раскладной стол
[3] => <span title='Оригинальный стол 1800 г. вторая половина.Изогнутые ножки, резная опора, натуральное дерево.Высота 125 Ширина 56 Высота 78 см.'>Оригинальный стол 1800 г. вторая половина.<br>Изогнутые ножки, резная опора, натуральное дерево.<br>Высота 125 Ширин...</span>
[4] => 210&euro;
[5] => sss
[6] =>
[7] => <span class="label label-sm label-success">Опубликован</span>
[8] => <a href="/jc_adm/?p=edit_product&id=2" class="btn btn-xs default btn-editable"><i class="fa fa-pencil"></i> Редактировать</a>
)

[2] => Array......

Но если я вручную создаю массив с, например, следующей информацией
echo json_encode(array('fruits' => array('banan', 'apple', 'mango', 'редиска')));
Он будет работать правильно и будет отображать строку в кодировке json. Но мой массив из примера не хочет возвращаться.

Не могли бы вы дать мне совет, почему это происходит?

Спасибо!


Отредактировано:

Я обнаружил, что если я удаляю настройки кодировки базы данных $objDB->query("SET NAMES utf8");, я получу результат, но вместо русского текста я получу вопросительные знаки ?????

{"data":[["<input type=\"checkbox\" name=\"id[]\" value=\"1\">",1,"?????????? ????","<span title='??????????? ?????????? ???? ? ?????????? ???????.??????, 1900-? ??.??????? ??????...

РЕШИТЬ:

Привет, я нашел решение для меня. Это моя ошибка, что я не показал вам полный код, тогда вы бы догадались, что пошло не так. 🙂

В моем цикле я использую substr() функционировать таким образом $cuttedDesc = (strlen($fullDesc) > 200) ? substr($fullDesc, 0, 200).'...' : $fullDesc; и после того, как я попытался повторить в JSON также эту строку. Но насколько я понимаю, эта функция неправильно обрезала мой русский текст, потому что русская буква — это 2 бита английской буквы, и эта функция сокращает одну русскую букву до половины. Это была ошибка.

Так что, если кто-то еще использует функцию для текста и имеет ту же проблему, посмотрите на отключение и проверьте скрипт без этих функций.

Спасибо всем за помощь.

1

Решение

Ваш json_encode, похоже, не работает, вы бы получили уведомление, если бы вы включили его в вашей конфигурации PHP. Есть другой способ определить, что ваш json_encode не выполнен, попробуйте получить значение json_last_error

Это сообщение об ошибке может помочь решить, что пошло не так с кодировкой.

РЕДАКТИРОВАТЬ

На подобные вопросы уже дан ответ:

Вот

3

Другие решения

Попробуйте это, это определенно будет работать

function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}

а затем позвоните

echo json_encode( utf8ize( $array ) );
2

Пытаться

json_encode($result, JSON_UNESCAPED_UNICODE);

Проверьте 2-й параметр json_encode

0
По вопросам рекламы [email protected]