Символы UTF-8 не отображаются правильно в формате JSON

Я использую json для вывода переменных из моей базы данных. Однако ë отображается как ■.

В попытке исправить это я сделал это:

Без удачи. Есть идеи как починить.

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

if (isset($_GET['term'])){
$return_arr = array();

try {
$conn = new PDO("mysql:host=".DB_SERVER.";port=8889;dbname=".DB_NAME, DB_USER, DB_PASSWORD);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $conn->prepare('SELECT School FROM Schools WHERE School LIKE :term');
$stmt->execute(array('term' => '%'.$_GET['term'].'%'));

while($row = $stmt->fetch()) {
$return_arr[] =  $row['School'];
}

} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}/* Toss back results as json encoded array. */

echo mb_detect_encoding($return_arr, 'auto');

}

0

Решение

Во-первых, посмотрите, действительно ли ваш стол utf8 закодирован. Это должно выглядеть примерно так:

CREATE TABLE `Schools` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`School` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Затем подключитесь к вашей базе данных следующим образом:

$dsn = 'mysql:dbname=test;host=127.0.0.1;port=3306;charset=utf8';
$user = 'root';
$password = 'password';
$conn = new PDO($dsn, $user, $password, [PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'utf8'"]);

Наконец использовать JSON_UNESCAPED_UNICODE:

echo json_encode($row, JSON_UNESCAPED_UNICODE);

Это должно сделать свое дело.

ОБНОВИТЬ

Это работало на PHP7.1 в таблице, которую я предоставил выше:

if (isset($_GET['term'])) {
$return_arr = array();

try {
$conn = new PDO("mysql:host=127.0.0.1;port=8101;dbname=test;charset=utf8", $user, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $conn->prepare('SELECT School FROM Schools WHERE School LIKE :term');
$stmt->execute(array('term' => '%'.$_GET['term'].'%'));

$return_arr = [];
while($row = $stmt->fetch()) {
$return_arr[] =  $row['School'];
}

} catch(PDOException $e) {
echo 'ERROR: ' . $e->getMessage();
}/* Toss back results as json encoded array. */

echo json_encode($return_arr, JSON_UNESCAPED_UNICODE);

}
1

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

1) Использование JSON_UNESCAPED_UNICODE в json_encode,

2) Убедитесь, что хранение данных, доступ к данным,
вывод и ввод в кодировке UTF-8 (UTF-8 полностью).

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector