Php ZendFramework在插入mysql时从第一个非a-z字符中剪切字符串
当我用Php ZendFramework在插入mysql时从第一个非a-z字符中剪切字符串,php,mysql,zend-framework,utf-8,character-encoding,Php,Mysql,Zend Framework,Utf 8,Character Encoding,当我用Zend_Form将一些数据插入带有非a-z字符(如chrząszcz)的数据库时,它会剪切我的字符串,并且在数据库中我只保存了chrz 在MySql中的每一次都设置为utf8\u general\u ci,当连接MySql时,我调用set CHARACTER set'utf8',文件也是UTF-8 我不知道该怎么办 我还编写了独立脚本,它插入并读取正确的字符串ZendFramework读取的结果也正确。问题只在于插入 有人知道怎么修吗 更新: 如果我插入带有以下内容的数据: $db-&g
Zend_Form
将一些数据插入带有非a-z
字符(如chrząszcz
)的数据库时,它会剪切我的字符串,并且在数据库中我只保存了chrz
在MySql
中的每一次都设置为utf8\u general\u ci
,当连接MySql
时,我调用set CHARACTER set'utf8'
,文件也是UTF-8
我不知道该怎么办
我还编写了独立脚本,它插入并读取正确的字符串ZendFramework
读取的结果也正确。问题只在于插入
有人知道怎么修吗
更新:
如果我插入带有以下内容的数据:
$db->query("INSERT INTO unit SET name = 'chrząszcz'");
在ZendFramework
中,它可以工作。问题在于以这种方式插入:
$unitTable = new Model_Unit_Table();
$unit = $unitTable->createRow();
$unit->setFromArray($form->getValues());
$unit->save();
更新2:
问题在于使用Zend_Filter_StringToLower
——它将字符串chrząszcz
修改为chrz�szcz
如何使此过滤器正常工作?我很确定这是一个编码问题。第一个非标准字符(即ASCII字符集上方)处的字符串脱落通常是由于在非UTF8上下文中插入UTF-8数据造成的,因此我的第一个怀疑是数据库连接的编码设置不正确
- 你能试试
$db->query(“SET NAMES utf8”)代码>在调用插入命令之前
- Zend_表单使用的连接是否明确
李>$db
- 您是否100%确定表单所在的页面是UTF-8编码的
- 回应您的评论:
否$form->getValue()的var_转储
给chrz�szcz。当var_转储一个
$\u POST superglobal it提供了正确的
克尔兹兹茨
这行吗
$testArray = array('name' => 'chrząszcz');
$unitTable = new Model_Unit_Table();
$unit = $unitTable->createRow();
$unit->setFromArray($testArray);
$unit->save();
如果是,您的问题可能与Zend_Form更相关
编辑:
您的筛选器需要使用而不是
Edit2:
试试这个:
$filter = new Zend_Filter_StringToLower();
$filter->setEncoding('UTF-8');
1. <代码>设置名称utf8未更改任何内容。2.如何检查/执行?3.是的,我百分之百肯定。我不是Zend人,所以我不知道,抱歉。但是我想象这些类有一个
$db
对象你能发布一个这样的实例吗?$form->getValues()返回正确的字符串吗?$form->getValues()
的var\u dump
给出了chrz�szcz
。当var_dump
a$\u POST
superglobal时,它会给出正确的chrząszcz
。是。我发现了问题-请查看更新2
。是否可以为所有形式的所有过滤器永久设置编码为UTF-8
?很抱歉,我不知道任何内置方法可以做到这一点。但是您可以使用自己的过滤器扩展Zend\u Filter\u StringToLower
,该过滤器使用UTF-8作为默认编码。