保存一行时字符丢失了吗?

时间:2012-12-19 06:23:36

标签: php zend-framework character-encoding zend-db multibyte

$userTb = new My_Tb_User();  //Child of Zend_Db_Table_Abstract
$row = $userTb->find(9)->current();
$row->name = 'STÖVER';
$row->save();

第9行的名称列值ST的内部用户表是否存储而不是STÖVER

ÖUTF-8支持的德语字符。如果我使用phpmyadmin手动输入'STÖVER',它将被正确存储。

创建数据库适配器时,我还传递了值为utf8的charset参数,但仍然没有运气!

2 个答案:

答案 0 :(得分:3)

如果您阅读utf8_encode的手册条目,则将ISO-8859-1编码的字符串转换为UTF-8 。函数名称是一个可怕的误称,因为它表明某种必要的自动编码。事实并非如此。如果您的源代码保存为UTF-8并且您将“STÖVER”分配给$string,那么$string将保存以UTF-8编码的字符“STÖVER”。无需采取进一步行动。实际上,尝试将UTF-8字符串(错误地)从ISO-8859-1转换为UTF-8会使其变得混乱。

utf8_encode('STÖVER');

stackoverflow

中查看此问题

答案 1 :(得分:2)

使用utf8_encode这是一种不好的做法,这会给您的应用带来很多复杂性。尝试通过查找源来解决问题。

Ssome的想法:

  • 数据库服务器字符集问题(检查服务器的编码)
  • 数据库客户端字符集问题(检查连接的编码)
  • 数据库表charset问题(检查表的编码)
  • php默认编码问题(在parameters.ini中检查default_encoding参数)
  • 多字节未配置(请参阅parameters.ini中的mb_string参数)
  • <form>字符集问题(检查它是否以utf-8格式发送)
  • 一个<html>字符集问题(你的html文件中没有设置enctype)
  • 一个Content-encoding:问题(Apache发送了错误的编码)。