Есть так много тем, посвященных этой теме, что я чувствую глупость спросить об этом.
Но я в полной растерянности относительно того, в чем может быть проблема.
Я пытаюсь вставить специальные символы (кириллицу, скандинавский и т. Д.) В базу данных MySQL через форму PHP (html).
Символы, такие как: Ä, Ö, Å, а также русский алфавит и т. Д.
Основываясь на предыдущих темах в этом форуме, я попробовал все следующее (вставлено сразу после строки подключения к базе данных MySQL):
mysqli->set_charset("utf8");
Это не сработало, поэтому я попробовал следующее:
mysqli_query("set names 'utf8'");
mysqli_query("set charset 'utf8'");
Это не рекомендуется PHP. Но я все равно попробовал, но все равно не повезло.
(Все мои базы данных, таблицы и столбцы сопоставлены как: utf8_general_ci)
Кроме того, все мои HTML-формы имеют следующее:
<meta charset="utf-8">
Итак, я в полной растерянности относительно того, что я делаю неправильно. Как только данные отправляются в базу данных, они отображаются (в самой базе данных) как мусорные символы (знаки вопроса и другие иероглифы).
Однако самое смешное:
(а) Когда я просматриваю данные на своем веб-сайте, они отображаются правильно;
(б) Когда данные отправляются в теле письма, они также отображаются правильно
Так ………. почему он не отображается правильно в самой базе данных?
При работе с определенной кодировкой (например, UTF-8) важно, чтобы вся строка кода была установлена на одну и ту же кодировку. Ниже приведены несколько советов, как следовать этому.
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
header('Content-Type: text/html; charset=utf-8');
$connection->set_charset("utf8");
(сразу после подключения)Также убедитесь, что ваша база данных и таблицы установлены в UTF-8, вы можете сделать это с помощью этого запроса (в базе данных это нужно сделать только один раз):
ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
Помните, что ВСЁ должно быть установлено в кодировке UFT-8. Если что-то можно установить на UFT-8 (или другую кодировку, проверьте PHP-docs (php.net)), это должно быть установлено на ту же кодировку, что и все остальное.
(а) Когда я просматриваю данные на своем веб-сайте, они отображаются правильно;
(б) Когда данные отправляются в теле письма, они также отображаются правильно
Это означает, что данные правильно хранятся в БД, когда вы получаете вывод, такой же, как ввод, логически правильно?
Другой вопрос: как вы смотрите в базу данных, какой тип клиента вы используете?
PHPMyAdmin, SomeDesktop Client .. Проблема будет там .. потому что данные хранятся правильно .. кажется так;)