Кодировка Json с акцентированными символами [дубликаты]

0

Я пытаюсь получить данные из базы данных MySql. Это мой код.

if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM Quotes WHERE Id=2";

if (mysqli_connect_errno()) die('Could not connect: ' . mysql_error());

$return_arr = array();
if ($result = mysqli_query($conn, $sql)) {
    while ($row = mysqli_fetch_assoc($result)) {
        $row_array['Id'] = $row['Id'];
        $row_array['Quote']= $row['Quote'];
        $row_array['Author'] = $row['Author'];
        $row_array['Category'] = $row['Category'];
        $row_array['Likes'] = $row['Likes'];
        array_push($return_arr, $row_array);
    }
}
echo json_encode($return_arr, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

mysqli_close($conn);

На веб-странице мне ничего не кажется, я обнаружил, что проблема связана с такими акцентированными символами, как "è" или "ò". Фактически, когда я пытаюсь это сделать:

<?php
echo "Result 1";
$return_arr = array();
if ($result = mysqli_query($conn, $sql)) {
    while ($row = mysqli_fetch_assoc($result)) {
        $row_array['Id'] = $row['Id'];
        $row_array['Quote']= $row['Quote'];
        $row_array['Author'] = $row['Author'];
        $row_array['Category'] = $row['Category'];
        $row_array['Likes'] = $row['Likes'];
        array_push($return_arr, $row_array);
    }
}
echo json_encode($return_arr, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

echo " Result 2 ";
$sql2 = "SELECT * FROM Quotes WHERE Id=2";

if (mysqli_connect_errno()) die('Could not connect: ' . mysql_error());

$return_arr2 = array();
if ($result2 = mysqli_query($conn, $sql2)) {
    while ($row = mysqli_fetch_assoc($result2)) {
        $row_array['Id'] = $row['Id'];
        $row_array['Quote']= $row['Quote'];
        $row_array['Author'] = $row['Author'];
        $row_array['Category'] = $row['Category'];
        $row_array['Likes'] = $row['Likes'];
        array_push($return_arr2, $row_array);
    }
}

echo json_encode($return_arr2, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

mysqli_close($conn);
?>

Я получаю этот результат на экране: Результат 1 [{"Id": "1", "Цитата": "Мой простой текст", "Автор": "Я", "Категория": "Х", "Нравится": "0"}] Результат 2

Я использую php 7.2 и последнюю версию или MySql. Вот как я настроил свою базу данных. Структура базы данных. База данных простая. Данные для тестирования.

UPDATE: я изменил все кодировки в utf8_bin, но это не повлияло. Кодировка базы данных Колонка кодирования Спасибо за внимание.

  • 2
    везде используйте utf8
  • 0
    Смотрите имена наборов mysql, кодировку страницы и т.д ..
Показать ещё 3 комментария
Теги:
mysqli
encoding

2 ответа

0

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

$return_arr2 = array();
if ($result2 = mysqli_query($conn, $sql2)) {
    while ($row = mysqli_fetch_assoc($result2)) {
        $row_array['Id'] = $row['Id'];
        $row_array['Quote']= utf8_encode($row['Quote']);
        $row_array['Author'] = $row['Author'];
        $row_array['Category'] = $row['Category'];
        $row_array['Likes'] = $row['Likes'];
        array_push($return_arr2, $row_array);
    }
}

echo json_encode($return_arr2, JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

Я принудительно кодирую utf8 с помощью "utf8_encode". Теперь результат:

Результат 1 [{"Id": "1", "Quote": "Мой простой текст", "Автор": "Я", "Категория": "X", "Нравится": "0"}] Результат 2 [ {"Id": "2", "Quote": "My Simplè Text with è или à", "Author": "Me", "Category": "X", "Likes": "0"}

Я думаю, что я могу использовать только JSON_UNESCAPED_UNICODE, но я предпочитаю хранить и другие.

  • 0
    Похоже, ваше соединение с базой данных находится в CP-1252.
0

Попробуйте сохранить все свои файлы в формате UTF-8 NO BOM. Например, с помощью блокнота, как на следующем снимке экрана:

Изображение 174551

Это решение? У меня уже была эта проблема... Работала для меня

Ещё вопросы

Сообщество Overcoder
Наверх
Меню