我有一个使用CakePHP在PHP 5.4.35中开发的项目,当我向数据库中插入一些unicode字符串时,


  例如:Bệnhsuygiảmtrínhớ


插入数据库后,这是记录的数据库内容:


  Bệnh suygiảm 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ệnh suygiảm trínhá»›
  
  和api响应:B \ u00e1 \ u00bb \ u2021nh su gi \ u00e1 \ u00ba \ u00a3m
  tr \ u00c3 \ u00ad nh \ u00e1 \ u00bb \ u203a已分配:Bệnh sugiảm
  trínhá»›在移动设备上(如果我使用php5.4则显示完美
  对于api)


;

然后我尝试从数据库中获取后使用php的utf8_decode函数,这是结果:

utf8_decode($record);



  B��?nh suygiảmtrính��?


我以为这个字符串可能是在插入php5.4中的mysql之前编码的,然后在从数据库中获取后立即解码,但是在php5.3中,当从数据库中插入和获取字符串时,它会保留该字符串。和PHP 5.3和5.4中的utf8的编码器,解码器不同???我猜。

我正在使用cakephp 2.5.3,它使用PDO来插入数据库并从数据库中获取数据
我已经尝试了所有方法来更改字符集,整理....但它没有效果,例如:
PDO-> exec('SET名称utf8'),PDO-> exec('Set名称utf8整理utf8_unicode_ci'); ....
我还设置了标题,html meta标签的字符集。

我的数据库在两种环境中都使用utf8_unicode_ci排序规则
数据库版本无异
只是我找不到解决问题的方法,所以如果有人对此有所了解,请给我一些解决方案
谢谢

最佳答案

问题是:我在php5.3托管环境中设置了encoding = utf8,但是在php5.4(开发环境)中我对此进行了注释,因此,当我将数据库从开发环境移至产品环境时,会发生此问题。
只需在2个环境中的数据库配置中设置相同的Encoding选项,代码即可完美运行

关于php - 从5.4移至5.3时cakephp mysql编码问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27791439/

10-11 04:46