Арабский язык с PHP и MySQL

Когда я работаю с кодом PHP, я могу успешно хранить арабские данные в базе данных MySQL, но получить данные в неправильном формате. Пожалуйста, обратите внимание на следующее:

  1. в моем конфигурационном файле у меня есть следующий код:

    $this->conn->exec("SET CHARACTER SET utf8");
    
  2. заголовок был изменен, как показано ниже:

    header('Content-Type: text/html; charset=UTF-8');
    

1

Решение

Кодировка должна измениться в трех точках:

  1. Не utf8 с самого начала.
  2. PDO-соединение измените его на значение по умолчанию.
  3. Кодировка таблицы / БД не utf8.

Здесь мы проверим вариант # 1

Сначала проверьте вашу кодировку текста

$text = "أهلا وسهلا!";
var_dump(mb_detect_encoding($text));

поместите ваш текст в переменную $ text и запустите этот скрипт в браузере (только для проверки кодировки). Функция mb_detect_encoding должна дать вам знать кодировку текста.

После того, как вы узнаете кодировку, вы можете использовать функцию iconv и конвертировать ее.
И затем, используйте функцию iconv для преобразования в UTF8, например:

if(mb_detect_encoding($text)!== "UTF-8")
$decoded_text = iconv(mb_detect_encoding($text), 'UTF-8', $text);
1

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

Чтобы правильно принимать, хранить и отображать многобайтовые наборы символов, необходимо обеспечить три вещи: столбец базы данных использует правильный тип данных, сценарий был написан с использованием многобайтовых безопасных функций и выходные данные отформатированы правильно.

В MySQL вам нужно хранить арабский текст в столбцах типа utf8mb4.

Если вы используете какое-либо редактирование или форматирование текста в вашем скрипте, скрипт должен быть написан в многобайтовом редакторе и использовать многобайтовый сейф функции.

И, наконец, ваш веб-сервер должен отправить utf-8, а браузер должен знать, чтобы отобразить utf-8 — см. Как лучше всего настроить PHP для работы с сайтом UTF-8

0

Вы должны сделать все форматы кодирования одинаковыми

выполните следующие шаги:

1-ваша таблица БД должна иметь кодировку utf8_general_ci

2-ваши sql запросы должны выполняться с теми же запросами, помещая следующее после подключения mysqli в файл conifg

$db->query("SET NAMES 'utf8'");

3-ваша страница должна иметь одинаковую кодировку мета-символов

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

выполните предыдущие 3 шага, и все будет хорошо

0