【问题标题】:Storing polish characters utf8 doctrine 2 PHP, MySQL, Zend Framework存储波兰字符 utf8 学说 2 PHP、MySQL、Zend Framework
【发布时间】:2012-02-05 22:39:51
【问题描述】:

我有一个使用 Zend 框架编写的 CMS 应用程序,允许您翻译内容。这对德语和法语字符非常有效,但在波兰语中遇到了困难,我已经正确设置了数据库和连接(据我所知),但我仍然在为波兰语存储和返回垃圾。数据库是 utf8_general_ci,字段也是。教义连接参数: resources.entityManager.connection.charset = "utf8" resources.entityManager.connection.default.parameters.driverOptions.1002 = "SET NAMES 'UTF8'"

带有发布翻译的数据库表单的页面有: header('内容类型: text/html; charset=utf-8'); (在顶部) [meta http-equiv="Content-Type" content="text/html; charset=utf8" /](在 head 标签中)

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

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

所以,法国人和德国人对此非常满意,但以下波兰语: 特殊性 w produkcji zawieszeń, szybkość

商店和视图为: 专业性 w produkcji zawieszeÅ„, szybkość

我正在绕着这个圈子转,所以任何想法都会非常感激。

【问题讨论】:

    标签: php mysql zend-framework doctrine-orm


    【解决方案1】:

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

    【讨论】:

    • 您能否提供一种在通过 orm:schema-tool:update 从教义控制台生成数据库时强制整理的方法?
    • @MarcelDjaman 您能否确认在'charset' =&gt; 'utf8', 之后添加'driverOptions' =&gt; array(1002=&gt;"SET NAMES 'UTF8' COLLATE 'utf8_unicode_ci'") 是否可以解决您的问题?
    • 对不起,我现在可以复制它,但我能说什么呢,我只能用'driverOptions' =&gt; array(1002=&gt;'SET NAMES utf8') 结束它
    • 这对我有用,只是为了更准确的解决方案描述,配置应该在“doctrine”下的“connection”下的“orm_default”下的“params”下添加,在上面的文本中它在“ orm_default" 不准确。
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      doctrine.connectionParameters.charset = "UTF8"
      

      【讨论】:

        【解决方案4】:

        我会使用以下来帮助调试

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

        【讨论】:

        • 谢谢你会尝试并让你知道。
        • 这里是调试的输出:bool(false) string(46) "specjalisty w produkcji zawieszeń, szybkość" string(76) "specjalisty w produkcji zawieszeÅ„, szybkość" c3BlY2phbGlzdHkgdyBwcm9kdWtjamkgemF3aWVzemXFhCwgc3p5YmtvxZvEhw== c3BlY2phbGlzdHkgdyBwcm9kdWtjamkgemF3aWVzemXDg+KApsOi4oKsxb4sIHN6eWJrb8OD4oCmw6LigqzCusOD4oCew6LigqzCoQ==
        【解决方案5】:

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

        尝试添加 _initDoctrine() 函数

        $conn->setCharset('utf8');
        

        【讨论】:

        • 感谢您的建议。我的连接是在 EntityManager 中建立的,所以我在那里添加了:$options = array( 'connection' =&gt; array( 'driver' =&gt; "{$config-&gt;connection-&gt;driver}", 'host' =&gt; "{$config-&gt;connection-&gt;host}", 'dbname' =&gt; "{$config-&gt;connection-&gt;dbname}", 'user' =&gt; "{$config-&gt;connection-&gt;user}", 'password' =&gt; "{$config-&gt;connection-&gt;password}", 'charset' =&gt; "utf8" ) ); 但这没有效果。
        • 我已经使用 zend_db 添加了相同的波兰文文本,这很好,所以我只能假设教义 2.0 或我的教义 2 配置存在问题。我已将 charset 设置为 utf8。至少我知道数据库很好。谢谢。
        猜你喜欢
        • 1970-01-01
        • 2013-04-20
        • 2014-01-04
        • 1970-01-01
        • 2013-11-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多