1

我正在尝试使用 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;
    }
}

我使用以下方法在我的控制器中传递数据:

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

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

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

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

有人有想法吗?

4

1 回答 1

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"
        ),
    ),
);
于 2013-09-29T21:45:19.263 回答