我在PHP5.4.35中使用CakePHP开发了一个项目,当我将一些unicode字符串插入到数据库中时,
例子: Bệnh suy giảm trínhớ
插入数据库后,这是记录的数据库内容:
Bá‡nh suy giági m tr.nhá»>
如果我使用php5.4,它在网站上显示得很好:
Bệnh suy giảm trínhớ
我还为这个项目开发了一个json格式的api,当我得到这些数据时,api响应是:B\u1ec7nhsuygi\u1ea3Mtr\u00ed nh\u1edb当客户端(移动客户端)获得这些数据并显示时,它显示与网站完全相同。
但是,当我移到带有php 5.3.23的主机时,它会显示在网站上,就像在数据库上一样:
Bá‡nh suy giági m tr.nhá»> 和api响应: B\u00e1\u00bb\u2021nh suy gi\u00e1\u00ba\u00a3m tr\u00c3\u00ad nh\u00e1\u00bb\u203a它被分解:移动设备上的Bá‡nh suy giágiági m tr.tr(如果我使用php5.4 for api就能很好地显示)
;
然后,在从数据库中获取php之后,我尝试使用php的utf8_decode函数,结果是:
utf8_decode($record);B��?nh suy giảm trính��?
我认为这个字符串可能是在php5.4插入到mysql之前编码的,然后在从数据库中得到它之后就被解码了,但是在php5.3中,它在插入和从数据库获取时保留了字符串。PHP5.3和5.4中的utf8编码器、译码器也不一样。我请客。
我使用cakephp 2.5.3,它使用PDO从数据库中插入和获取数据,我一直试图更改字符集,整理.但其效果不像: PDO -> exec ('SET name utf8'),PDO -> exec (‘Set name utf8 collate utf8_unicode_ci');我还设置了标题的字符集,html元标记.
我的数据库使用utf8_unicode_ci排序规则在两个环境中都没有不同的数据库版本--只是我找不到解决问题的方法,所以如果有人知道这个问题,请给我一些解决方案谢谢
发布于 2015-01-06 11:06:06
问题是:我在php5.3托管环境中设置了编码= utf8,但是在php5.4 (开发环境)中我对它进行了注释,因此当我将数据库从开发环境转移到product时,就会出现这个问题。只需在2 env中在数据库配置中设置相同的编码选项,代码就能很好地工作。
https://stackoverflow.com/questions/27791439
复制相似问题