Вопрос

У меня есть база данных MySQL с таблицей InnoDB, содержащей поля utf8_general_ci varchar.Когда я извлекаю их через PHP (через PEAR:: MDB2) и пытаюсь вывести их (через Smarty), я получаю???символы.Я хотел бы знать, как исправить эту проблему, которая, скорее всего, вызвана PHP.

Полезная информация для ознакомления:

  • Это новая версия сайта, над которым я работаю, в старой версии была та же проблема, хотя она не использовала Smarty или MDB2, так что, скорее всего, они не являются причиной.Старый программист использовал htmlentities (), чтобы устранить проблему, но я пытаюсь избежать этого.
  • Кодировка символов всех моих файлов (шаблона, исходного кода и т.д.) - UTF-8 без спецификации.
  • Когда я отображаю страницу, все символы с ударением (те, что в шаблонах, а не те, что поступают из MySQL) отображаются правильно, а кодировка в браузере - UTF-8.Если я вручную переключу его на ISO-8859-1, то символ из MySQL выводится правильно, но не остальные.

В принципе, кажется, что PHP или MySQL преобразуют данные UTF-8, содержащиеся в базе данных, в ISO-8859-1 в какой-то момент во время процесса запроса / выборки, и это то, что я хочу исправить.

Я провел много поисков, но не нашел никакого решения, и я надеюсь, что проблема кроется в какой-то настройке.Я бы хотел избежать необходимости использовать htmlentities () или utf8_encode (), однако это может быть единственным способом, пока не появится PHP6.

Спасибо вам за ваш вклад в это дело!

Это было полезно?

Решение

Вам нужно выполнить несколько запросов, чтобы указать ему использовать UTF-8 для соединения (по умолчанию действительно используется Latin-1).Вот что я использую:

SET CHARACTER SET = "utf8";
SET character_set_database = "utf8";
SET character_set_connection = "utf8";
SET character_set_server = "utf8";

Я знаю, что некоторые из них кажутся излишними, но они были протестированы и, похоже, работают довольно хорошо...

Другие советы

Я предполагаю, что данные не были закодированы в формате utf-8, когда попали в базу данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top