Home  >  Article  >  Backend Development  >  php json_encode加密后,有的汉字显示不出来 急解决方法

php json_encode加密后,有的汉字显示不出来 急解决方法

WBOY
WBOYOriginal
2016-06-13 12:03:581260browse

php json_encode加密后,有的汉字显示不出来 急
$e=mb_detect_encoding($str) 输出个字符编码类型,怎么会这样?
ASCII-------------
UTF-8-------------,王五
UTF-8-------------,赵六
ASCII-------------2014-07-16
-------------电子商务品牌市场部
-------------工作简报
UTF-8-------------未存档
UTF-8-------------未发送
-------------经理办公室
ASCII-------------2
UTF-8-------------以后的文号只须选择文号头后系统将自动生成
UTF-8-------------我 是 谁
ASCII-------------11
ASCII-------------2014
ASCII-------------
-------------测试部门
ASCII-------------
UTF-8-------------李刚,郭美美,赵智勇,张田欣
ASCII-------------Admin
-------------工作简报的总第期数和当年期数都可以由系统自动生成,生成后在发文表列表中可以查看
UTF-8-------------研发中心
-------------集团领导
-------------急
UTF-8-------------普通
ASCII-------------
ASCII-------------

使用  json_encode 对数组加密后,输出的汉字部分是空的,怎么回事了?
各位大侠们,有没有好的解决方案? 急救


------解决方案--------------------
你原始的数据是 gbk 的,这是不能被 json_encode 所接受的
json_encode 只接受 utf-8 编码的数据,于是 gbk 汉字因不能识别而丢弃
只有少量的字符组合被错误的解释为 utf-8 双字节字符而被保留了下来,造成了你的疑惑不解,要是一个都不剩的话,反倒使事情明朗化了

所以如果你需要产生 json 的话需要做一下编码转换

array_walk_recursive($ar, function(&$s) { $s = iconv('gbk', 'utf-8', $s); });

如果数据是从 mysql 读取的,那么只需在读取前执行一次
mysql_query('set names utf8');

就完事大吉了

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn