2010-07-01 3 views
1

Мои скрипты, безусловно, сохранены в 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 для хранения символа €, исходящего из ввода HTTP или строкового литерала в исходном коде, я остаюсь с c3 a2 e2 80 9a c2 ac согласно MySQL Workbench 5.2. Извлечение этого из базы данных и отображение его на странице отлично работает. Однако в phpMyAdmin и Workbench я вижу €.

При использовании этих двух инструментов для хранения €, я остаюсь с e2 82 ac, что, по-видимому, является правильным представлением UTF-8, но если я попытаюсь получить и затем вывести его с помощью PHP, отобразится .

Мой вопрос: откуда возникло это несоответствие, и возможно ли, чтобы мои веб-страницы и инструменты баз данных работали безупречно?

+1

Странно, звучит так, будто вы все делаете правильно. Вы на 1000% уверены, что ваше соединение с БД является UTF-8? Можете ли вы отправить запрос «SET NAMES utf8;», чтобы убедиться? –

+0

И ваш браузер игнорирует кодировку? Кодировка является рекомендательной и будет игнорироваться браузером, если вы настроили ее для этого. Является ли поведение одинаковым в разных браузерах? На разных машинах? – Andrew

+0

Для хорошей оценки убедитесь, что ваш PHP-скрипт настроен на использование UTF-8. Если PHP выполняет преобразования символов «на лету», потому что считает, что файлы должны использовать другую таблицу символов ISO, это может объяснить то, что вы видите. 'ini_set ('default_charset', 'UTF-8');' – Andrew

ответ

1

Директива charset в DSN фактически применяется к MSSQL. Мне просто нужно было выполнить SET NAMES. Извини за это.

я добился того, что таким образом:

0

просто конвертировать € в HTML-сущности & евро; для SUPERFIX (но вы можете получить этот вопрос с другими специальными гольцов)

другая сторона проблемы (и более конкретно) будет проверять MySQL character_set_server и наиболее частой причиной character_set_client - seeAlso: connection charsets

также , важно отметить, что meta equiv не имеет значения, вам нужно всегда установить заголовок ('Content-Type: ...)

0

Поскольку ваша HTML-страница верна, кажется, что вы сохраняете правильные данные в базе данных.

€ является кодировкой UTF-8 знака Euro, неправильно интерпретированного как windows-1252. Похоже, что ваши инструменты Windows используют кодировку «ANSI» вместо кодировки базы данных.

Смежные вопросы