2012-01-09 97 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