保存一行时缺少字符


$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",则可以正确存储。

我在创建数据库适配器时还将Charset参数带有Value utf8,但仍然没有运气!

如果您读取了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中检查此问题

这是使用utf8_encode的不良习惯,这为您的应用程序增加了很多复杂性。尝试通过寻找来源来解决问题。

ssome的想法:

  • 数据库服务器炭集问题(检查服务器的编码)
  • 数据库客户端炭集问题(检查连接的编码)
  • 数据库表炭集问题(检查表的编码)
  • php默认编码问题(在parameters.ini中检查default_encoding参数)
  • 多型误解(请参阅参数中的MB_STRING参数)
  • <form> charset问题(检查是否以UTF-8发送)
  • <html> charset问题(其中html文件中未设置enctype)
  • Content-encoding:问题(apache发送错误的编码)。

最新更新