PHPActive记录编码问题


PHPActiveRecord Encoding Issue

我正在使用PHPActiveRecord来管理我的数据库模型,但是我遇到了一些编码问题。

我正在使用PHPMyAdmin v3.3.10.4MySQL client v5.0.51aPHPActiveRecord v1.0。我的连接排序规则和所有表都是使用utf8_general_ci排序规则定义的。

我的PHPActiveRecord连接是这样创建的:

$cfg->set_connections(array(
   'development' => 'mysql://username:password@mydomain.com/database?charset=utf8'));

如果我通过PhpMyAdmin手动插入带有特殊字符(例如é,ã,ç)的条目,则没有问题,但是当我通过PHPActiveRecord插入条目时,在浏览PhpMyAdmin表时无法正确可视化特殊字符。

如果我列出我的表条目并通过PHP页面请求显示它们,我必须设置header('Content-Type: text/html; charset=utf-8'),但我可以正确列出所有带有特殊字符的条目。

我是否必须在数据库或PhpMyAdmin上进行任何配置才能正确列出使用PHPActiveRecord创建的特殊字符的条目?

您正在使用的 PHP ActiveRecord 1.0 版不支持通过"?charset=utf8"指定编码。它是后来在 v1.1 中添加的,请参阅此提交。

要验证这一点,请检查您的 php-activerecord/lib/adapters/MysqlAdapter 副本.php并搜索"set_encoding"。如果找不到set_encoding函数定义,则表示您使用的是不支持"?charset=utf8"配置参数的旧版本的PHP ActiveRecord。

至少有2种方法可以解决它:

A) 升级到最新的每晚版本的 PHP ActiveRecord。升级可能会破坏您现有的代码,因此请使用新版本的库彻底测试所有内容,或者

B) 只需在配置连接后添加此代码:

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

它将设置与该模型关联的 MySQL 连接以使用 UTF-8 字符集。如果您使用多个MySQL连接(例如连接到多个数据库),请为每个连接执行该查询。