Intereting Posts
Yii2: Почему ключ auth в классе User? Является ли хранение данных в PHP $ _SESSION небезопасным? PHP | Получить входное имя через $ _POST Случайный заказ SimplePie Multiple Feeds Являются ли @imagecreatefromjpeg и imagejpeg () эффективными для предотвращения загрузки пользователями изображений с вредоносным кодом php внутри них? Существуют ли какие-либо существенные причины для использования isset () над @ в php Двоичные данные не сохраняются должным образом в MySQL MySQL и PHP – как отображать все строки, где значение поля равно x? Динамически добавлять частное свойство к объекту Проверка формы – стандартное решение? Настройка сеанса PHP на индексной странице для проверки XSRF Неустранимая ошибка: Class 'FacebookRequest' не найден В PHP, imagepng () принимает параметр фильтра. Как эти фильтры влияют на вывод функции? Несколько простой вопрос пересечения массива PHP Должны ли выполняться подготовленные PHP PDO заявления?

PHP – json_encode (строка, JSON_UNESCAPED_UNICODE) не ускользает от чешских символов

Я выбираю некоторые данные из базы данных и кодирую их как json, но у меня проблема с чешскими знаками, такими как

A, I, R, C, Z …

Мой файл находится в кодировке utf-8, моя база данных также находится в кодировке utf-8, я также установил заголовок для кодировки utf-8. Что еще мне делать, пожалуйста?

Мой код:

header('Content-Type: text/html; charset=utf-8'); while($tmprow = mysqli_fetch_array($result)) { $row['user'] = mb_convert_encoding($tmprow['user'], "UTF-8", "auto"); $row['package'] = mb_convert_encoding($tmprow['package'], "UTF-8", "auto"); $row['url'] = mb_convert_encoding($tmprow['url'], "UTF-8", "auto"); $row['rating'] = mb_convert_encoding($tmprow['rating'], "UTF-8", "auto"); array_push($response, $row); } $json = json_encode($response, JSON_UNESCAPED_UNICODE); if(!$json) { echo "error"; } 

и часть напечатанного json: "package":"zv???tkanalouce"

EDIT: без функции mb_convert_encoding () печатная строка пуста и печатается «ошибка».

С кодом, который у вас есть в вашем примере, вывод:

 json_encode($response, JSON_UNESCAPED_UNICODE); "package":"zv???tkanalouce" 

Вы видите вопросительные знаки там, потому что они были введены mb_convert_encoding . Это происходит, когда вы используете обнаружение кодировки (« auto » в качестве третьего параметра) и что обнаружение кодировки не способно обрабатывать символ на входе, заменяя его вопросительным знаком. Примерная строка кода:

 $row['url'] = mb_convert_encoding($tmprow['url'], "UTF-8", "auto"); 

Это также означает, что данные, выходящие из вашей базы данных, не кодируются UTF-8, потому что mb_convert_encoding($buffer, 'UTF-8', 'auto'); не вводит вопросительные знаки, если $buffer кодируется UTF-8.

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

Самое простое, что вы просто укажете на ссылку базы данных, которую вы запрашиваете для строк UTF-8, а затем просто используйте их:

 $mysqli = new mysqli("localhost", "my_user", "my_password", "test"); /* check connection */ if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); exit(); } /* change character set to utf8 */ if (!$mysqli->set_charset("utf8")) { printf("Error loading character set utf8: %s\n", $mysqli->error); } else { printf("Current character set: %s\n", $mysqli->character_set_name()); } 

В предыдущем примере кода просто показано, как установить набор символов клиента по умолчанию для UTF-8 с помощью mysqli. Из этого руководства было взято , как и материал, который мы имеем на сайте, например utf 8 – PHP и MySQLi UTF8 .

Затем вы можете значительно улучшить свой код:

 $response = $result->fetch_all(MYSQLI_ASSOC); $json = json_encode($response, JSON_UNESCAPED_UNICODE); if (FALSE === $json) { throw new LogicException( sprintf('Not json: %d - %s', json_last_error(), json_last_error_msg()) ); } header('Content-Type: application/json'); echo $json;