2012-01-09 63 views
0

我有一個使用Zend Framework編寫的CMS應用程序,允許您翻譯內容。這適用於德語和法語字符,但與波蘭人一起努力,我已經建立了正確的數據庫和連接(據我所知),但我仍然得到垃圾存儲並返回波蘭語。數據庫是utf8_general_ci,字段也是如此。學說連接PARAMS: resources.entityManager.connection.charset = 「utf-8」 resources.entityManager.connection.default.parameters.driverOptions.1002 = 「SET NAMES 'UTF8'」存儲波蘭語字符utf8 doctrine 2 PHP,MySQL,Zend Framework

與數據庫的形式發佈的頁面翻譯有: header('Content-type:text/html; charset = utf-8'); (頂部) [meta http-equiv =「Content-Type」content =「text/html; charset = utf8」/](在head標籤中)

我沒有額外的編碼保存到字符串DATABSE(教義2):

$cn->setContent($pageForm->getValue($field)); 

所以,法語和德語與此很高興,但以下波蘭: specjalistyW¯¯produkcjizawieszeń,szybkość

商店和意見: specjalistyW¯¯produkcjizawieszeÅ 「,szybkoÅ»

我正在圍繞着這個圈子,所以任何想法將非常感激。

回答

3

實際的問題是,如何我在學說2.我通過實體管理器連接設置UTF8和設置需要去那裏,而不是引導或的application.ini

'charset' => 'utf8', 'driverOptions' => array(1002=>'SET NAMES utf8') 
0

我會使用以下方法來幫助調試

$strBefore = 'specjalisty w produkcji zawieszeń, szybkość'; 
putdb($strbefore); 
$strAfter = getdb(); 
var_dump($strBefore === $strAfter, $strBefore, $strAfter); 
echo base64_encode($strBefore); 
echo base64_encode($strAfter); 
+0

謝謝你會嘗試,讓你知道。 – ed103 2012-01-09 17:26:12

+0

這裏是從調試輸出: '布爾(假)的字符串(46) 「specjalisty瓦特produkcjizawieszeń,szybkość」 串(76)「specjalisty瓦特produkcjizawieszeÃ...â€Z,szybkoÃ...›Ã「â €¡」 c3BlY2phbGlzdHkgdyBwcm9kdWtjamkgemF3aWVzemXFhCwgc3p5YmtvxZvEhw == c3BlY2phbGlzdHkgdyBwcm9kdWtjamkgemF3aWVzemXDg + KApsOi4oKsxb4sIHN6eWJrb8OD4oCmw6LigqzCusOD4oCew6LigqzCoQ ==' – ed103 2012-01-09 17:38:04

0

我檢查了,現在從DB在波蘭語「specjalistyW¯¯produkcjizawieszeń,szybkość」字符串顯示,它看起來不錯。 (ZF 1.11,學說1.2)

試加在_initDoctrine()函數

$conn->setCharset('utf8'); 
+0

感謝您的建議。我的連接是在EntityManager中進行的,所以我添加了: '$ options = array( \t'connection'=> array( 'driver'=>「{$ config-> connection-> driver}」, 'host'=>「{$ config-> connection-> host}」, 'dbname'=>「{$ config-> connection-> dbname}」, 'user'=>「{$ config->連接 - >用戶}」, '密碼'=> 「{組$ config->連接 - >密碼}」, '字符集'=> 「UTF8」 ) );' 但這沒有影響。 – ed103 2012-01-11 09:35:05

+0

我已經使用zend_db添加了相同的波蘭語文本,並且它很好,所以我可以假設的是,有一個問題與教條2.0或我的配置與教條2.我已經設置字符集utf8雖然。至少我知道db是好的。謝謝。 – ed103 2012-01-11 13:21:30

1

以供將來參考,這取決於你如何設置主義與Zend框架,在的application.ini下面的行可能會解決這個問題爲您:

doctrine.connectionParameters.charset = "UTF8" 
6

設置'charset' => 'utf8'orm_default在配置解決了我的情況下的問題。

<?php 
return array(
    'doctrine' => array(
     'connection' => array(
      'orm_default' => array(
       'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver', 
       'params'  => array(
        'host'  => 'localhost', 
        'user'  => 'dbuser', 
        'password' => 'dbpass', 
        'dbname' => 'dbname', 

        'charset' => 'utf8', 
       // ^^^^^^^^^^^^^^^^^^^^^ 
       ) 
      ) 
     ), 
     'driver'  => array(
      'zfcuser_entity' => array(
       'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver', 
       'paths' => 'module/Application/src/Application/Entity', 
      ), 
      'orm_default' => array(
       'drivers' => array(
        'Application\Entity' => 'zfcuser_entity', 
       ), 
      ), 
     ), 
    ), 
    'zfcuser' => array(
     'user_entity_class'  => 'Application\Entity\User', 
     'enable_default_entities' => false, 
    ), 
); 
+0

可以請你提供一種方法來強制通過orm從doctrine控制檯生成數據庫時的整理:schema-tool:update? – 2014-12-29 07:46:17

+1

@MarcelDjaman你可以確認在''charset'=>'utf8'後加''driverOptions'=> array(1002 =>「SET NAMES'UTF8'COLLATE'utf8_unicode_ci'」)''解決了你的問題嗎? – 2015-09-17 13:30:07

+0

對不起,我現在可以重現它,但我可以說我結束它與''driverOptions'=>數組(1002 =>'SET NAMES utf8')'只有 – 2015-09-17 17:29:00