2013-07-24 57 views
1

我试图确保从我的数据库收到的数据是使用Zend Frameword 2在utf-8中。 为此,我将我的php文件编码为utf- 8,我将元字符集设置为utf-8(以确保页面上显示的是utf-8)。从数据库检索ZF2中的数据库为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); 

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

直接在页面上写入以及数据:

我然后使用print_r的打印时,在视图中的数据从控制器传递到页面的其他变量编码正确,但从数据库检索到的数据显示?特殊字符应该在哪里。 他们显示正确,如果我使用utf8_encode(),所以我假设数据从数据库中提取时没有编码。

任何人有想法?

+1

全球配置的数据库存储在UTF8的数据?运行mysql> show table status;并查看排序规则列的说明 –

+0

我已将排序规则设置为UTF8_general_ci,适用于我的所有表格。 – ether

回答

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" 
     ), 
    ), 
);