存储波兰字符utf8条令2 PHP、MySQL、Zend框架

存储波兰字符utf8条令2 PHP、MySQL、Zend框架,php,mysql,zend-framework,doctrine-orm,Php,Mysql,Zend Framework,Doctrine Orm,我有一个使用Zend框架编写的CMS应用程序,允许您翻译内容。这对德语和法语字符非常有效,但波兰语很难使用,我已经正确地设置了数据库和连接(据我所知),但我仍然在存储垃圾并返回波兰语。数据库是utf8\u general\u ci,字段也是。原则连接参数: resources.entityManager.connection.charset=“utf8” resources.entityManager.connection.default.parameters.driverOptions.100

我有一个使用Zend框架编写的CMS应用程序,允许您翻译内容。这对德语和法语字符非常有效,但波兰语很难使用,我已经正确地设置了数据库和连接(据我所知),但我仍然在存储垃圾并返回波兰语。数据库是utf8\u general\u ci,字段也是。原则连接参数: resources.entityManager.connection.charset=“utf8” resources.entityManager.connection.default.parameters.driverOptions.1002=“设置名称‘UTF8’”

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

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

因此,法国和德国对此非常满意,但以下波兰语: 西布科奇扎维泽ń的产品专区

存储和视图为: 扎维斯泽(zawieszeÅ,szybkoÅ›196‡)产品专用区


我将围绕这一点进行讨论,因此任何想法都将不胜感激。

我将使用以下内容来帮助调试

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

我现在已经检查了从db显示的波兰语字符串“specjalisty w produkcji zawieszeń,szybkość”,看起来不错。(zf 1.11,条令1.2)

尝试外接程序_init()函数


实际的问题是我如何在原则2中设置utf8。我通过实体管理器进行连接,并设置所需的设置,而不是Bootstrap或application.ini

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

为便于将来参考,根据您如何使用Zend Framework设置条令,application.ini中的以下行可能会为您解决此问题:

doctrine.connectionParameters.charset = "UTF8"

在配置中设置
'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,
    ),
);

谢谢您尝试并让您知道。下面是调试的输出:
bool(false)string(46)“specjalisty w produkcji zawieszeè,szybkość”string(76)“specjalisty w produkcji zawieszeÃ…ž,szybkoÃÃɆ”C3BLY2PHBGLZDHKGDYBWCM9KDWTJRB8OD4OCMW6LIGQZCUSOD4OCW6LIGQZCOQ==C3BLY2PHBGLZDHKGDYBWCM9KDWTJKGEMF3AWVZEMXDG+KAPSOI4OKSB4SIHN6EWJRB8OD4OCMW6LIGQZCOQ==
感谢您的建议。我的连接是在EntityManager中建立的,所以我在那里添加了:
$options=array('connection'=>array('driver'=>“{$config->connection->driver}”,'host'=>“{$config->connection->host}”,'dbname'=>“{$config->connection->dbname}”,'user'=>“{$config->connection->user}”,'password'=>“{$config->connection->password}”,'charset'=>“utf8”)但这没有效果。我已经使用zend_db添加了相同的波兰语文本,这很好,所以我只能假设条令2.0或条令2的配置存在问题。我已经将字符集设置为utf8。至少我知道db是好的。谢谢。在通过orm:schema tool:update从条令控制台生成数据库时,您能提供一种强制整理的方法吗?@MarcelDjaman您能确认是否在
'driverOptions'=>数组(1002=>“SET NAMES'UTF8'collate'UTF8\u unicode\u ci'”
之后添加
'charset'=>'UTF8',
解决了您的问题?很抱歉,我现在可以复制它,但是我能说什么呢?我以
'driverOptions'=>array(1002=>'SET NAMES utf8')
仅此适用于我,只是为了更准确地描述解决方案,配置应该添加到“原则”下“连接”下“orm_default”下的“参数”下,在上面的文本中,在“orm_default”下面提到了它,这是不准确的。
doctrine.connectionParameters.charset = "UTF8"
<?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,
    ),
);