我有一个使用CakePHP在PHP 5.4.35中开发的项目,当我将一些unicode字符串插入数据库时,
示例:Bệnhsuygiảmtrínhớ
插入数据库后,这是记录的数据库内容:
BệnhsuygiảtrÃnhá»>
如果我使用php 5.4,它在网站上完美显示:
Bệnhsuygiảmtrínhớ
我还为这个项目开发了json格式的api,当我得到这些数据时api响应是: B \ u1ec7nh suy gi \ u1ea3m tr \ u00ed nh \ u1edb 当客户端(移动客户端)获取此数据并显示时,它显示与网站完全相同。
但是当我转移到使用php 5.3.23的托管时,它就像在数据库上一样显示在网站上:
BệnhsuygiảtrÃnhá»>
和api回应:B \ u00e1 \ u00bn \ u2021nh suy gi \ u00e1 \ u00ba \ u00a3m 它是公开的:Bệnhsuygiảm trÃnhá»>在移动设备上(如果我使用php5.4,它会完美显示) for api)
然后我尝试从数据库获取它后使用php的utf8_decode函数,这是结果:
utf8_decode($record);
B ?nhsuygiảmtrính ?
我认为也许这个字符串在插入到php5.4中的mysql之前编码,然后在从数据库中获取后立即解码,但在php5.3中它保留字符串插入并从数据库获取。而编码器,php 5.3和5.4中utf8的解码器是不同的???我猜。
我正在使用cakephp 2.5.3并且它使用PDO从数据库插入和获取数据 我已经尝试过一直改变字符集,整理....但它不会像以下那样影响: PDO - > exec('SET names utf8'),PDO - > exec('Set names utf8 collate utf8_unicode_ci'); .... 我还设置了header,html元标记的字符集....
我的数据库在两个环境中都使用utf8_unicode_ci collation 数据库版本没什么不同 只是我找不到解决问题的方法,所以如果有人知道这个,请给我一些解决方案 感谢
答案 0 :(得分:0)
问题是:我在php5.3托管环境中设置encoding = utf8,但是在php5.4(开发环境)中我评论过它,因此当我将数据库从开发环境移动到产品环境时,就会出现这个问题。 只需在2 env中的数据库配置中设置相同的Encoding选项,代码就可以正常工作