Несоответствие кодирования персонажа
-
02-10-2019 - |
Вопрос
Мои скрипты определенно сохраняются в UTF-8. Я усугубил PDO с "{$this->engine}:host={$this->host};dbname={$this->name};charset=UTF-8"
. Отказ Мои таблицы используют InnoDB и собираются с помощью UTF8_General_CI. Мои страницы отправляются либо с Content-Type: text/html; charset=UTF-8
заголовок или то <meta>
эквивалент.
При использовании PDO для хранения характера a €, исходящие из HTTP-ввода, либо строкового литерала в исходном коде, я остался с c3 a2 e2 80 9a c2 ac
Согласно MySQL Workbench 5.2. Получение этого из базы данных и отображение его на странице работает нормально. И все же в Phpmyadmin и Workbench я вижу €
.
При использовании этих двух инструментов для хранения A €, я остался с e2 82 ac
, по-видимому, является правильным представлением UTF-8, но если я попытаюсь получить, а затем выводить это с PHP, отображается.
Мой вопрос в том, откуда возникает это расхождение и возможно ли мои веб-страницы и инструменты баз данных оба работают безупречно?
Решение
Директива Charset в DSN на самом деле применяется к MSSQL. Я просто нужно было выполнить SET NAMES
. Отказ Извини за это.
Я достиг этого:
parent::__construct("{$this->engine}:host={$this->host};dbname={$this->name}",
$this->user, $this->password,
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES 'UTF8'"));
Другие советы
Просто конвертируйте HTML-объект € для Superfix (но вы можете получить проблему с другими специальными символами)
другая сторона проблемы (и более конкретно) проверяет mysql charace_set_server. и наиболее распространенной причиной charace_set_client. - смотрите также: Соединение Charsets.
Кроме того, важно отметить, что Meta Equiv не имеет значения, вам нужно всегда Установите заголовок («Тип контента: ...)
Поскольку ваша страница HTML верна, кажется, что вы храните правильные данные в базе данных.
€
Является ли кодировка UTF-8 знака евро неправильно истолкована как Windows-1252. Похоже, что ваши инструменты Windows используют «ANSI», кодирующие вместо кодировки базы данных.