Я пытаюсь отобразить ОЧЕНЬ специальные символы (например, ) на моем веб-сайте и сохранить их в своей базе данных.
Когда я пишу специальные символы, подобные этим, они отображаются один раз, но когда я перезагружаю страницу и сервер получает строку из базы данных, она отображается как «??????? ?????? ??? «Я пытался сделать много вещей, чтобы это исправить, но ни одна из них не сработала.
Это не проблема визуализации, потому что заголовок установлен правильно:
<meta charset="utf-8">
Что я пытался сделать:
$db = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
$db->query("SET character_set_results=utf8mb4");
mb_language('uni');
mb_internal_encoding('UTF-8');
$db->query("SET NAMES utf8mb4");
$db->set_charset('utf8mb4');
Но ничего из этого не сработало.
Кроме того, я попытался (только для отладки) изменить строку в текстовом поле базы данных на , и я получил ошибку:
Предупреждение: # 1300 Неверная строка символов utf8: ‘F09D91’
Предупреждение: # 1366 Неверное строковое значение: ‘\ xF0 \ x9D \ x91 \ xBB \ xF0 \ x9D …’ для столбца ‘текст’ в строке 1
Я действительно пробовал каждое решение, которое нашел здесь и за его пределами, но ничего не получалось.
Любая помощь будет оценена.
Как обсуждено в комментариях.
Во многих случаях вам нужно разместить весь код, следующий
$db->query("SET character_set_results=utf8mb4");
до эта линия.
Также может помочь использование другой кодировки файлов.
Я должен был сделать это сам раньше, как ни странно. Это также может быть кодировка сервера по умолчанию, которая может где-то переопределять; У меня была эта проблема и раньше.
Плюс, если вы запрашиваете где-то, например, при выполнении SELECT, UPDATE или INSERT, то это важный что коды кодирования помещаются перед запросом, если это так.
Других решений пока нет …