Я почти полностью выполнил задачу капитального ремонта своего веб-приложения, чтобы он был правильно "UTF-8". Однако я обнаружил, что если я установил набор символов подключения utf8
с помощью mysqli_set_charset
, результат будет таким, что вывод будет отображаться некорректно (действительно, похоже, что кодировка символов страницы была неверно идентифицирована), тогда как если я не буду установите набор символов соединения, он отображается правильно.
Например, строка, хранящаяся в одной таблице в моей базе данных, - набор символов столбца utf8
- правильно повторяется как Página principal
, если я не устанавливаю набор символов соединения. Если я установил набор символов соединения, он выглядит как Página principal
.
Подробности: PHP-скрипты, которые я использую для проверки этого поведения, имеют следующий метатег в разделе <head>
:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
Я определил, что набор символов по умолчанию для новых подключений на моем хосте latin1
. База данных, к которой я подключаюсь, имеет набор символов по умолчанию utf8
. Вот код, используемый для создания ссылки на базу данных:
$cxn = @mysqli_connect('localhost', $db_user, $db_password, $db_database) or die('Failed to connect to the database.');
mysqli_set_charset($cxn, 'utf8');
mysqli_query($cxn, 'SET SESSION sql_mode = \'TRADITIONAL\'');
Дополнительно: в случае, если это должно послужить дополнительным судебным доказательством, я обнаружил, что если я просмотрю страницу в Firefox и вручную изменим кодировку символа на ISO-8859-1
, указанная выше строка будет выглядеть как Página principal
.
Это, вероятно, связано с тем, что кодировка символов была различной при вставке данных и, следовательно, могла быть сохранена в неправильном кодировании (установлена ли кодировка таблицы в utf8?). Проверьте, что свеже вставляемые данные верны. (Данные Aka, которые были вставлены с подключением utf8)