|
操纵的代码以下:
很简略的代码,无外文环境统统一般,输没以下:- <?php
- $usr = new User();
- echo json_encode($usr);
- ?>
复制代码 一旦有外文的时辰会呈现二种环境。
第一种环境是对于象自己的某个值为外文的属性是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上望到他人的函数以下:- private function to_utf8($in)
- {
- if (is_array($in)) {
- foreach ($in as $key => $value)
- {
- $out[$this->to_utf8($key)] = $this->to_utf8($value);
- }
- }
- elseif(is_string($in))
- {
- if(mb_detect_encoding($in) != "UTF-8")
- return utf8_encode($in);
- else
- return $in;
- }
- else
- {
- return $in;
- }
- return $out;
- }
复制代码 因而拿高去转换编码发明已没有为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的时辰,万万不克不及健忘转换成本来的编码,不然会输出乱码 !!
困扰了一地的题目终究弄定了。 |
|