我在一个用codeigniter + doctrine构建的简单webapp中有一个奇怪的(对我来说)行为。
我有一个本地apache服务器,我使用相同的代码共享托管,并且两个应用程序都连接到同一个数据库(托管在共享托管中)
此数据库具有UTF-8 Unicode字符集和utf8_general_ci排序规则。
所有表单和页面都有这样的元字符集。
<!DOCTYPE html>
<html lang="es" xml:lang="es">
<head>
<meta charset="utf-8">
事情是,在一个服务器(让我们说本地)我放了类似“institució”的东西,我保存它,我可以看到它很好,但是,在另一台服务器(远程的)上,我看到像“instituci”这样的东西“
然后我去共享主机,我把这个词修改为“institució”然后我在本地服务器上看到这个单词显示为“institució”
我不能使用“utf8_decode”或“utf8_encode”,因为根据我保存此字符串的位置,我必须进行解码或编码。
我确定我错过了一些配置,但我不知道从哪里开始。
本地我已经安装了Mavericks的默认apache2服务器。
我检索帖子数据并将其保存到学说对象中,如下所示:
$question->setQuestion($this->input->post('question'));
我认为codeigniter和doctrine负责这一点。
谢谢!
答案 0 :(得分:0)
解决!
我应该有更多的人。解决方案是为位于application / libraries / Doctrine / doctrine.php中的connectionOptions数组添加一个新选项
新选项名为driverOptions,它看起来像这样:
'driverOptions' => array(
1002=>'SET NAMES utf8'
)
所以整个connectionOptions是这样的:
// Database connection information
$connectionOptions = array(
'driver' => 'pdo_mysql',
'user' => $db['default']['username'],
'password' => $db['default']['password'],
'host' => $db['default']['hostname'],
'dbname' => $db['default']['database'],
'charset' => 'utf8',
'driverOptions' => array(
1002=>'SET NAMES utf8'
)
);
这个新选项解决了我根据服务器具有不同行为的问题。
希望它可以帮助别人!