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

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

Я прочитал темы о пустом результате 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...... 

Но если я вручную создаю массив с, например, следующим infromation 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; $cuttedDesc = (strlen($fullDesc) > 200) ? substr($fullDesc, 0, 200).'...' : $fullDesc; и после того, как я попробовал эхо в json и эту строку. Но как я понимаю, что функция неправильно отрезала мой русский текст, потому что русская буква – это 2-х битная английская буква, и эта функция сокращает одно русское письмо до половины. Это была ошибка.

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

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

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

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

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

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

Вот

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

 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 ) ); 

Пытаться

 json_encode($result, JSON_UNESCAPED_UNICODE); 

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