$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发送错误的编码)。