存储波兰字符utf8条令2 PHP、MySQL、Zend框架
我有一个使用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‡)产品专用区存储波兰字符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
我将围绕这一点进行讨论,因此任何想法都将不胜感激。我将使用以下内容来帮助调试
$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,
),
);