Charsets в целом, с конкретными вопросами, касающимися Zend DB - некорректное отображение данных - PullRequest
1 голос
/ 16 сентября 2009

У меня проблемы с отображением правильных символов в приложении Zend Framework.

EG / rue de l'Odéon

Отображается как:

rue de l'Od on

При отображении информации через веб-сервис, а также при ее отображении в представлении приложений.

Я пробовал следующие вещи:

1) Установите кодировку символов в представлении.

$view->setEncoding('UTF-8');

2) Гарантировал, что кодировка столбца / таблицы в базовой базе данных - UTF8 (mysql db)

ALTER TABLE tablename CONVERT TO CHARACTER SET utf8;

3) При создании моего соединения с БД передал кодировку в метод Zend_Db :: Factory. Это раздел конфигурации объекта, который я получил через реестр.

 [_config:protected] => Array
    (
        [host] => localhost
        [username] => root
        [password] => ---------------
        [dbname] => db_staging
        [charset] => utf8
        [options] => Array
            (
                [caseFolding] => 0
                [autoQuoteIdentifiers] => 1
            )

Ответы [ 2 ]

3 голосов
/ 17 сентября 2009

В дополнение к превосходному списку Падрейка, посмотрите на http://akrabat.com/2009/03/18/utf8-php-and-mysql/

3 голосов
/ 16 сентября 2009

Несколько вопросов ниже. Я знаю, что некоторые из них звучат совершенно глупо, но когда я застреваю, как это, я автоматически предполагаю, что это что-то настолько очевидное, что я потрачу дни на то, чтобы пнуть себя! :) Во-первых, я полагаю, что вы используете ZF 1.8, учитывая вышеуказанную опцию charset? Если нет (или даже если приведенный ниже список не решает проблему), вернитесь к старому методу, чтобы узнать, решает ли он что-нибудь первым.

  1. Можете ли вы подтвердить, что сортировка таблиц теперь выполняется utf8_general_ci, как и все текстовые поля? Приведенная выше команда не упоминает параметры сортировки, поэтому я предполагаю, что она была установлена ​​в качестве параметров сортировки по умолчанию (по умолчанию она отсутствует, а кодировка - utf8).
  2. Теперь отправьте эту команду еще раз, но также установите для параметров сортировки значение utf8_unicode_ci (медленнее, но точнее, чем общие параметры сортировки - производительность сильно снизится, но может помочь с существующей таблицей данных).
  3. Вы повторно вводили данные просто для уверенности? Даже напечатайте его в известном редакторе UTF-8, просто чтобы дважды проверить, что вы точно скопировали символы utf8; и
  4. Вы на 100% уверены, что исходный текст - UTF-8, а не что-то вроде ISO-8859-1 или Windows 1252?
  5. Убедитесь, что кодировка View установлена ​​как можно раньше (и новый View добавлен в помощник ViewRenderer).
  6. Какой драйвер mysql используется? Mysqli или PDO? Вы использовали соответствующие настройки для вашего варианта?
  7. Есть ли в View переопределение кодировки символов? Кодирование берется из заголовка Content-Type, затем из любого объявления XML (например, XHTML) и, наконец, из мета-http-эквивалентного тега для Content-Type. Это также порядок приоритета - если более ранняя декларация не соответствует UTF-8, страница может не использовать ту, которую вы намеревались. Вы можете сбросить заголовок, установив пользовательский объект Response на фронт-контроллере с правильным набором заголовков - обычно «Content-Type: text / html; charset = UTF-8».
  8. Чтобы обнаружить кодировку, если браузер неправильно обнаружил, вы также можете отладить вручную, сбросив кодировку браузера для страницы, например, Вид> Кодировка символов в Firefox. Убедитесь, что кодировка ISO или Windows отображает его лучше.
  9. Попробуйте обернуть текстовый вывод в шаблон в utf8decode () - может быть, что-то двойное в этом? Более странные вещи произошли ...

Мой кризисный список UTF-8;). Дайте мне знать, если что-нибудь из перечисленного поможет. Я думаю, что он охватывает большинство предметов, которые я могу придумать.

...