Как настроить кодировки для работы с PHP фреймворком CodeIgniter

Владимир | | CodeIgniter, PHP.

Поддержка кодировок в CodeIgniter
Недавно я столкнулся с проблемой.

Создал базу данных и в ней таблицу. Во время создания явно задал кодировку (utf-8).

После этого, установил и настроил CodeIgniter. Все представления (views) тоже были в кодировке utf-8, и, естественно, был добавлен мета-тег:

<meta http-equiv="content-type" content="text/html; charset=UTF-8" />

Т.е. кириллица в браузере отображалась правильно.

Начинаю добавлять данные в БД (с помощью scaffolding). Все отлично работает, буквы отображаются правильно.

Но, через некоторое время мне понадобилось сделать дамп базы. Запускаю phpMyAdmin, экспортирую базу и вижу вместо кириллицы «кракозябры»! При просмотре данных в phpMyAdmin – те же «кракозябры». Ввожу данные через phpMyAdmin – в нем все нормально, но на сайте – знаки вопроса.

Если бы этот дамп был нужен лично мне, я бы не стал заморачиваться. Но я хотел поместить его в этом блоге, и такой вариант меня не устраивал.

Самое непонятное заключалось в том, что тут же была база данных, созданная WordPress, с теми же самыми кодировками. И в ней все работало отлично, и на сайте, и в phpMyAdmin.

В общем, после недолгих поисков, решение нашлось. Предложил его mihailt.

Идея заключается в том, что нужно выполнить “SET NAMES UTF8” для каждого соединения.

Для это в конфигурационный файл базы данных (/system/application/config/database.php) добавляем

$db[‘default’][‘charset’] = "UTF8";

А в файле /system/database/DB.php добавляем строку

$DB->query(“SET NAMES ?”, $params[‘charset’]);

(сразу после $DB =& new $driver($params);).

Все тут же отлично заработало.

Для справки. Кодировки БД были такими:
character_set_client – utf8
character_set_connection – utf8
character_set_database – utf8
character_set_filesystem – binary
character_set_results – utf8
character_set_server – utf8
character_set_system – utf8
collation_connection – utf8_unicode_ci
collation_database – utf8_general_ci
collation_server – utf8_general_ci

Примечание. Эти данные можно получить с помощью запросов

SHOW VARIABLES LIKE 'character%'
SHOW VARIABLES LIKE 'collation%'