Intereting Posts
PHP: вывести последнюю строку огромного файла текстового журнала Как удалить несколько дублированных строк Вставка данных с переднего конца в mysql db в angularjs Невозможно следить за местоположением (URL) с помощью cURL, когда установлен параметр open_basedir – ошибка обратного вызова API Laravel 5 добавить результаты запроса в foreach к массиву установка клиентской библиотеки Google для Google Analtics PHP Выполнение скрипта PHP с заданием CRON Вывести метабокс в виде форматированного текста Объявление сеанса Максимальное время жизни в htaccess загрузить изображение из удаленного источника и изменить размер, затем сохранить Как я могу разобрать JSON-файл с PHP? Заголовок Content-Type: application / octet-stream возвращает встроенный текст / html Отправить запрос и получить результат поиска без обновления HTML-формы в PHP Как использовать PHP GD для создания 1 бит растровых изображений (только черный и белый, без серых)

php json_encode частично не работает с массивами

У меня есть PHP-код, который должен кодировать данные таблицы DB в json. Поэтому я использовал json_encode ().

Я использую приведенные здесь таблицы – http://www.geekality.net/2011/08/21/country-names-continent-names-and-iso-3166-codes-for-mysql/

Поведение этого кода, по-видимому, отличается для разных входов.

Запрос – $query = "SELECT * FROM countries "; не возвращает никаких значений json.

Запрос – $query = "SELECT * FROM countries where continent_code='AS'"; правильно возвращает значения json.

тогда как $query = "SELECT * FROM countries where continent_code='EU'"; также ничего не возвращает.

Аналогично «NA», «AF» не работали, а другие работали идеально.

Я странный из этого поведения PHP json_encode.

Это мой код.

 <?php $con=mysqli_connect('localhost','xxxx','xxxxx','joomla30'); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); } $result = mysqli_query($con,"SELECT * FROM countries where continent_code='EU'") or die (mysqli_error($con)); while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) { $orders[] = array( 'CountryCode' => $row['code'], 'CountryName' => $row['name'] ); } //print_r($orders); echo json_encode($orders); mysqli_close($con); ?> 

До предыдущей строки json_encode данные переносятся. Поэтому я думаю, что проблема с json-кодированием.

Я пытался узнать об этом с помощью print_r($orders); ,
Я получил от него следующий результат.

Если я попробую «ЕС», я получаю этот массив.

 Array ( [0] => Array ( [CountryCode] => AD [CountryName] => Andorra ) [1] => Array ( [CountryCode] => AL [CountryName] => Albania ) [2] => Array ( [CountryCode] => AT [CountryName] => Austria ) [3] => Array ( [CountryCode] => AX [CountryName] => Åland Islands )... 

Если я попытаюсь использовать «AS», я получаю этот массив.

 Array ( [0] => Array ( [CountryCode] => AE [CountryName] => United Arab Emirates ) [1] => Array ( [CountryCode] => AF [CountryName] => Afghanistan) [2] => Array ( [CountryCode] => AM [CountryName] => Armenia) [3] => Array ( [CountryCode] => AZ [CountryName] => Azerbaijan)... 

Оба массива выглядят одинаково правильно … Но Json_encode работает только на «AS», а не на «EU».

Кто-нибудь знает, как решить эту проблему ? Если да, скажите мне, пожалуйста.

Solutions Collecting From Web of "php json_encode частично не работает с массивами"

Вы должны убедиться, что каждый компонент вашего веб-приложения использует UTF-8. Этот ответ из другого вопроса расскажет вам, как это сделать. Если вы прочтете это из RFC4627:

Кодировка: текст JSON будет закодирован в Unicode. Кодировка по умолчанию – UTF-8.

Функция json_encode требует, чтобы все входящие данные кодировались в кодировке UTF-8. Вот почему струны, такие как Åland Islands , вероятно, вызывают проблемы.

Просто случайная догадка здесь: json_encode требует, чтобы все данные, которые вы кормили, были кодированы в кодировке UTF-8, и в противном случае это не удастся. В тех странах, где он терпит неудачу, у вас, вероятно, есть данные, которые содержат символы, отличные от ASCII. Чистый ASCII, оказывается, совместим с символами UTF-8, отличными от ASCII, которые вам необходимо соблюдать. См. UTF-8 на всем протяжении, как получить кодированные данные UTF-8 из вашей базы данных (используйте mysqli_set_charset ).