4
$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 参数,但仍然没有运气!

4

2 回答 2

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中检查这个问题

于 2012-12-19T07:00:14.587 回答
2

这是一个不好的做法utf8_encode,这会给您的应用程序增加很多复杂性。尝试通过寻找源头来解决问题。

一些想法:

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