2013-10-26 1 views
1

Я использую PHPActiveRecord для управления моделями моей базы данных, однако я испытываю некоторые проблемы с кодировкой.PHPActiveRecord Encoding Issue

Я использую PHPMyAdmin v3.3.10.4, MySQL client v5.0.51a и PHPActiveRecord v1.0. Мои настройки сопоставления и все мои таблицы определены с помощью сопоставления utf8_general_ci.

Мои PHPActiveRecord соединения создается следующим образом:

$cfg->set_connections(array(
    'development' => 'mysql://username:[email protected]/database?charset=utf8')); 

Если я вручную вставить запись с помощью специальных символов (например, е, а, ç) через PhpMyAdmin, нет никаких проблем, однако при вставке записей через PHPActiveRecord, я не могу визуализировать специальные символы правильно при просмотре таблицы через PhpMyAdmin.

Если я перечисляю свои записи в таблице и показываю их через запрос страницы PHP, я должен установить header('Content-Type: text/html; charset=utf-8'), но я могу правильно перечислить все записи специальными символами.

Должна ли быть какая-либо конфигурация в моей базе данных или PhpMyAdmin для ввода записей со специальными символами, созданными с помощью PHPActiveRecord?

ответ

1

Версия 1.0 используемого ActiveRecord для PHP не поддерживает указание кодировки через «? Charset = utf8». Он был добавлен позднее в версии 1.1, см. this commit.

Чтобы проверить, проверьте ли вы копию php-activerecord/lib/adapters/MysqlAdapter.php и выполните поиск «set_encoding». Если вы не можете найти определение функции set_encoding, это означает, что вы используете старую версию PHP ActiveRecord, которая не поддерживает параметр конфигурации «? Charset = utf8».

Есть по крайней мере 2 пути ее решения:

A) Обновление до последней ночной сборки PHP ActiveRecord. Существует апгрейд возможность сломает существующий код, так что проверить все тщательно с новой версией библиотеки, ИЛИ

B) Просто добавьте этот код после того, как вы настроили соединение:

YourModel::query("SET NAMES 'utf8'"); 

Он будет установлен Соединение MySQL, связанное с этой моделью, использует набор символов UTF-8. Если вы используете несколько подключений MySQL (например, подключение к нескольким базам данных), выполните этот запрос для каждого соединения.

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

  • Нет связанных вопросов^_^