【转】php json_encode中文为空的解决办法-阿里云开发者社区

开发者社区> 嗯哼9925> 正文

【转】php json_encode中文为空的解决办法

简介:
+关注继续查看

本文列举3个方法,实现json_encode()后的string显示中文问题。

做接口时不需要,但存log时帮了大忙了。

在贴代码前,必须贴上官方param和return,链接:http://php.net/manual/zh/function.json-encode.php

 

参数

value

待编码的 value ,除了resource 类型之外,可以为任何数据类型

该函数只能接受 UTF-8 编码的数据

options

由以下常量组成的二进制掩码: JSON_HEX_QUOTJSON_HEX_TAGJSON_HEX_AMPJSON_HEX_APOS,JSON_NUMERIC_CHECKJSON_PRETTY_PRINTJSON_UNESCAPED_SLASHESJSON_FORCE_OBJECT,JSON_UNESCAPED_UNICODE.

 

返回值

编码成功则返回一个以 JSON 形式表示的 string 或者在失败时返回 FALSE 。

 

复制代码
<?php
// json_encode() 保持中文方法详解
 
$arr['city'] = '北京';
$arr['name'] = 'weilong';
 
// 直接输出
// Res: {"city":"\u5317\u4eac","name":"weilong"}
echo json_encode($arr), "\n";
 
// 1. 加参数,PHP版本>5.4.0
// Res: {"city":"北京","name":"weilong"}
echo json_encode($arr, JSON_UNESCAPED_UNICODE), "\n";  // php > 5.4.0
 
// 2. 正则替换,json_encode后,正则将编码替换成中文
// Res: {"city":"北京","name":"weilong"}
echo preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2BE', 'UTF-8', pack('H4', '\\1'))", json_encode($arr)), "\n";
 
// 3. urldecode()、urlencode()函数,不推荐
// Res1: null, Res2: {"city":"北京","name":"weilong"}
echo urldecode(json_encode(urlencode($arr))), "\n";
$arr['city'] = urlencode($arr['city']);  // urlencode()参数必须是string
echo urldecode(json_encode($arr)), "\n";
 
 
// 另外注意json_decode()参数区别。
$arr['city'] = '北京';
$arr['name'] = 'weilong';
$str = json_encode($arr);
$str2 = json_decode($str);
$str3 = json_decode($str, true);
 
print_r($str2); // object
/* Res:
stdClass Object
(
    [city] => 北京
    [name] => weilong
) */
 
print_r($str3); // array
/* Res:
Array
(
    [city] => 北京
    [name] => weilong
)
*/
复制代码






本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/4731246.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
解决PHPMailer邮件标题中文乱码
PHPMailer是PHP语言的优秀的邮件发送包。支持 SMTP,CC,BCC,Sendmail 等多种发送方式。 下面是一个基于 PHPMailer 的发送函数,旧代码了: function smtp_main_send( $to, $subject, $message, $f...
738 0
mac: vmware fusion中cent os启动假死的解决办法
环境: mac os X 10.9.2 + vmware 6.0.2 + cent OS 6.5 minimal 现象: Booting CentOS (2.6.32-358.e.l6.i686) in 0 seconds.
1248 0
Android官方开发文档Training系列课程中文版:与其它APP交互之从Activity获得结果
原文地址:http://android.xsoftlab.net/training/basics/intents/result.html 启动其它Activity并不是单方向的。
658 0
Oracle 11g sys,system 密码忘记设置解决办法
原文: Oracle 11g sys,system 密码忘记设置解决办法 1.启动sqlplus 2.请输入用户名:  sqlplus/as sysdba 3.输入口令: 直接回车 4.连接到:    Oracle Database 11g Enterprise Edition Release 11.
997 0
ApiPost(中文版postman)如何发送一个随机数或者时间戳?
当我们的请求参数是一个时间戳或者随机数时,我们可以用ApiPost的内建变量
2192 0
weblogic启动失败:Could not obtain the localhost address 解决办法
linux下weblogic启动如果出现这个错误,多半是hosts文件不对 1、先输入hostname,查看本机计算机名(比如:server123) 2、sudo vi /etc/hosts 编辑hosts文件,在最后加一行 127.
963 0
"org.jboss.netty.internal.LoggerConfigurator".DESCRIBED is already registered 的解决办法
今天在jboss 6.2 EAP上部署一个项目时,报以下错误: org.jboss.msc.service.DuplicateServiceException: Service jboss.pojo.
1136 0
PHP Header下载文件在IE文件名中文乱码问题
解决PHP Header下载文件在IE文件名中文乱码有两种常见的,一种是是把页面编码改成utf8,另一种是对中文url进入urlencode编码,根据UA检测,区别下载,就可以解决了 $filename = "中文.
1002 0
+关注
4716
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载