在ZF2中以utf-8的形式从数据库中检索数据

时间:2013-07-24 21:09:37

标签: mysql utf-8 character-encoding zend-framework2

我正在尝试使用Zend Frameword 2确保从我的数据库收到的数据是utf-8。 为此,我将我的php文件编码为utf-8,并将元字符集设置为utf-8(以确保页面上显示的内容为utf-8)。

我还尝试将我的适配器的字符集设置为utf-8,但它似乎对数据没有任何影响。 我尝试了很多方法:

$adapter = new Adapter(array(
        'driver'   => 'pdo_mysql',
        'database' => $database,
        'username' => $username,
        'password' => $password,
        'charset' => 'utf8'
));

$adapter = new Adapter(array(
            'driver'   => 'pdo_mysql',
            'database' => $database,
            'username' => $username,
            'password' => $password,
            'charset' => 'utf-8'
    ));

$adapter = new Adapter(array(
            'driver'   => 'pdo_mysql',
            'database' => $database,
            'username' => $username,
            'password' => $password,
            'driverOptions' => array(
                    1002=>'SET NAMES utf8'
            )
    ));

我使用TableGateway对象获取数据。我应该在该对象中指定它是否在utf-8中? (但我没有在该对象中看到这样做的属性)

以下是我获取数据的方法:

$results = $this->tableGateway->selectWith($select);
if(count($results) > 0){
    //this loop transforms each object into an audio
    foreach($results as $row){
        $data['object'][$row->id] = $row;
    }
}

我使用以下命令在Controller中传递数据:

$view->setVariable('arAudios', $arAudios);

然后我使用print_r打印视图中的数据:

<?php echo '<pre>'; print_r($arAudios); echo '</pre>';?>

直接写在页面上的数据以及从控制器传递到页面的其他变量都被正确编码,但是从数据库中检索的数据显示了什么?特殊字符应该在哪里。   如果我使用utf8_encode(),它们会正确显示,所以我假设数据在从数据库中获取时没有被编码。

有人有想法吗?

1 个答案:

答案 0 :(得分:1)

只需像

那样进行全局配置
return array(
    'db' => array(
        'driver'         => 'Pdo',
        'dsn'            => 'mysql:dbname=singclub;host=localhost;',
        'username'       => 'root',
        'password'       => '',
        'driver_options' => array(
                PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES UTF8"
        ),
    ),
);