存储波兰字符utf8 doctrine 2 PHP,MySQL,Zend Framework

时间:2012-01-09 11:27:13

标签: php mysql zend-framework doctrine-orm

我有一个使用Zend Framework编写的CMS应用程序,允许您翻译内容。这适用于德语和法语字符,但正在与波兰语挣扎,我已正确设置数据库和连接(据我所知)但我仍然得到垃圾存储并返回波兰语。数据库是utf8_general_ci,字段也是。学说联系参数: resources.entityManager.connection.charset =“utf8” resources.entityManager.connection.default.parameters.driverOptions.1002 =“SET NAMES'UTF8'”

发布翻译的数据库表单页面包含: header('Content-type:text / html; charset = utf-8'); (在顶部)     [meta http-equiv =“Content-Type”content =“text / html; charset = utf8”/](在头标签中)

我对保存到数据库的字符串没有额外的编码(学说2):

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

所以,法国人和德国人对此非常满意,但以下波兰语: specjalisty wprodukcjazawieszeń,szybkość

商店和视图: specjalisty wprodukcjazawieszeÅ“,szybkoÅ>ć

我将围绕这个圈子进行,所以任何想法都会非常感激。

5 个答案:

答案 0 :(得分: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,
    ),
);

答案 1 :(得分:3)

实际问题是我在Doctrine 2中设置utf8的方式。我通过实体管理器进行连接,并且需要进行设置而不是Bootstrap或application.ini

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

答案 2 :(得分:1)

为了将来参考,根据您使用Zend Framework设置Doctrine的方式,application.ini中的以下行可以为您解决此问题:

doctrine.connectionParameters.charset = "UTF8"

答案 3 :(得分: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);

答案 4 :(得分:0)

我现在正在检查从db中显示波兰语“specjalisty wprodukcjazawieszeń,szybkość”的字符串,它看起来不错。 (zf 1.11,学说1.2)

尝试添加_initDoctrine()函数

$conn->setCharset('utf8');