Я почти выполнил задачу по перестройке моего веб-приложения, чтобы он был должным образом «осведомлен о UTF-8». Однако я обнаружил, что если я установлю набор символов подключения на utf8
с использованием mysqli_set_charset
, то результат будет выглядеть неправильно (в действительности это выглядит так, как если бы кодировка страницы была неверно идентифицирована), тогда как если я не устанавливать набор символов подключения, он отображается правильно.
Например, строка, хранящаяся в одной таблице в моей базе данных - набор символов столбца utf8
- отображается правильно как Página principal
, если I не устанавливает набор символов подключения. Если я do установил набор символов соединения, он выглядит как 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
.