找回密码
 注册
搜索
查看: 978|回复: 0

php处理json时中文问题的解决方法

[复制链接]
发表于 2012-10-17 21:09:23 | 显示全部楼层 |阅读模式
  操纵的代码以下:
  

  很简略的代码,无外文环境统统一般,输没以下:
  1. <?php
  2. $usr = new User();
  3. echo json_encode($usr);
  4. ?>
复制代码
一旦有外文的时辰会呈现二种环境。
  第一种环境是对于象自己的某个值为外文的属性是utf-8编码,则会有以下输没:
  {"PlatformID":"123213","UserID":"1023","UserName":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"}
  此中的UserName黑白人类说话,那个是一般的,若是咱们用firebug望高便是外文的。(那个纠结了尔半地)
  第两种环境黑白utf-8编码,输没会酿成null:
  {"PlatformID":"123213","UserID":"1023","UserName":null}
  很奇异,查了脚册后晓得json_encode是只对于utf-8有用,别的编码均会变成null.
  上面便起头办理编码转化的题目。
  正在php.net上望到他人的函数以下:
  1. private function to_utf8($in)
  2. {
  3. if (is_array($in)) {
  4. foreach ($in as $key => $value)
  5. {
  6. $out[$this->to_utf8($key)] = $this->to_utf8($value);
  7. }
  8. }
  9. elseif(is_string($in))
  10. {
  11. if(mb_detect_encoding($in) != "UTF-8")
  12. return utf8_encode($in);
  13. else
  14. return $in;
  15. }
  16. else
  17. {
  18. return $in;
  19. }
  20. return $out;
  21. }
复制代码
因而拿高去转换编码发明已没有为null.惊喜之高用firebug翻开,发明其实不是尔本来的外笔墨符....起头纠结......
  莫非是要让他转换成本来的编码?归去探求本初编码......
  测试起头:
  1.把$usr->UserName间接输没,页里头配置charset=utf-8.
乱码
  
  2.echo json_encode($usr)输没UserName=null
  3.页里头配置为charset=gbk,输没精确->能够肯定本编码为gbk
  末了经由过程IE,Chrome,Firefox测试患上没论断:
  1.包管页里字符散取数据库同等,输没必定一般 。
  2.作json_encode时包管数据编码是utf-8,json_decode一般。
  3.若是要对于非utf-8字符作json_encode,先转换成utf-8。
  4.对于非utf-8字符作json_decode的时辰,万万不克不及健忘转换成本来的编码,不然会
输出乱码
!!
  困扰了一地的题目终究弄定了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|QQ客服|联系我们|Archiver|手机版|小黑屋|悉远网络 ( 鄂ICP备09013446号 )

GMT+8, 2024-11-21 20:17 , Processed in 0.032664 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表