注:php版本5.4下,不支持json_encode对中文的处理,要么升级php版本。

json_encode($value,$options)

其中有2个比较常用到的参数:

1.JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256

2.JSON_UNESCAPED_SLASHES(不转义反斜杠,对应的数字 64

A.数组中存在哪些字符会导致数组json_encode返回false

总结;

1.json_encode 所有字符串数据的编码必须是 UTF-8,不然返回false;

2.如果不是utf-8 可以utf8_encode()处理下;待处理json最大深度默认512,可以 覆盖它$json = json_encode($arr, 0, 1024);可以使用json_last_error_msg查看具体返回false原因

B.在gbk的程序中,直接使用json_encode编码包含中文字符的数组,将会返回null。

解决方法是用iconv转换UTF-8后再用encode编码。

代码如下:

function gbk_to_utf8($data) {
if( is_array($data) ) {
foreach ($data as $k => $v) {
if ( is_array($v) ) {
$data[$k] = gbk_to_utf8($v);
} else {
$data[$k] = iconv('gbk', 'utf-8', $v);
}
}
return $data;
} else {
$data = iconv('gbk', 'utf-8', $data);
return $data;
}
}

使用方法:

$data = '测试';
echo json_encode(gbk_to_utf8($data));

C.若数组中的数据为UNICODE编码,需将UNICODE编码成UTF-8字符串,不然将会返回null。

  // 将UNICODE编码后的内容进行解码,编码后的内容格式:\u56fe\u7247 (原始:图片)
function unicode_decode($name) {
// 转换编码,将Unicode编码转换成可以浏览的utf-8编码
$pattern = '/([\w]+)|(\\\u([\w]{4}))/i';
preg_match_all($pattern, $name, $matches);
if (!empty($matches))
{
$name = '';
for ($j = 0; $j < count($matches[0]); $j++)
{
$str = $matches[0][$j];
if (strpos($str, '\\u') === 0)
{
$code = base_convert(substr($str, 2, 2), 16, 10);
$code2 = base_convert(substr($str, 4), 16, 10);
$c = chr($code).chr($code2);
$c = iconv('UCS-2', 'UTF-8', $c);
$name .= $c;
}
else
{
$name .= $str;
}
}
}
return $name;
}

使用方法:

$data = "\u7a33\u6b65\u524d\u8fdb";
echo unicode_decode($data);

D.json_encode的第二个参数,默认false

当第二个参数默认false,为 TRUE 时,将返回数组,FALSE 时返回对象

php使用json_encode中遇见问题?的更多相关文章

  1. [持续更新] Python学习、使用过程中遇见的非代码层面知识(想不到更好的标题了 T_T)

    写在前面: 这篇博文记录的不是python代码.数据结构.算法相关的内容,而是在学习.使用过程中遇见的一些没有技术含量,但有时很令人抓耳挠腮的小东西.比如:python内置库怎么看.python搜索模 ...

  2. php json_encode中提示的中文总是返回"\u767b\u5f55\u6210\u529f\uff01"的解决办法

    最近在练习使用 php 写一些简单的接口,但是在返回的消息中,如果有中文,在测试后总是返回: {"resultCode":200,"message":" ...

  3. vue-cli 中遇见的问题,记录爬坑日常!

    本片文章我将会记录使用vue-cli 以及一些相关插件遇见的问题和解决方案,另外本文章将会持续更新,本着互联网分享精神,希望我所记录的日常能对大家有所帮助. 1.在img和html文件处于同级阶段,i ...

  4. jQuery插件编写学习中遇见的问题--attr prop

    个人博客: https://chenjiahao.xyz 最近在学习jQuery的插件的编写,有两种方式,$.fn.extend以及$.extend,一种是作用于对象原型上,一种是直接作用于jQuer ...

  5. 【Azure 存储服务】Hadoop集群中使用ADLS(Azure Data Lake Storage)过程中遇见执行PUT操作报错

    问题描述 在Hadoop集中中,使用ADLS 作为数据源,在执行PUT操作(上传文件到ADLS中),遇见 400错误[put: Operation failed: "An HTTP head ...

  6. 总结Android中遇见的OOM

    一 .Android应用中内存泄漏几种的原因: 1.单例模式导致的内存泄漏: 当调用getInstance时,如果传入的context是Activity的context.只要这个单例没有被释放,这个A ...

  7. PHP json_encode中日语问题

    <?php header('Content-type:text/html;charset=utf-8'); $s = array('message'=>'4月以降.遺体の捜索活動が続けられ ...

  8. Hibernate中遇见的问题

    1.在用Hibernate写增删改查时,有两种方式:a.HQL语句,b.原生态sql语句 如果我要执行的语句是:select * from Question HQL是这么写的: Session ses ...

  9. 学习spring中遇见的问题

    报错: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nes ...

随机推荐

  1. 7.2 Go type assertion

    7.2 Go type assertion 类型断言是使用在接口值上的操作. 语法x.(T)被称为类型断言,x代表接口的类型,T代表一个类型检查. 类型断言检查它操作对象的动态类型是否和断言类型匹配. ...

  2. Django ORM性能优化之count和len方法的选择(非常详细推荐干货)

    接下来我将从源码层面分情况和应用分析我们在计算queryset数据集时是用orm的count函数计算长度还是用len函数计算数据集长度. 首先,我们知道ORM查询queryset数据集是惰性查询的,只 ...

  3. mysql小白系列_08 zabbix添加自定义监控项items和触发器

    监控mysql存活 1.配置agent自定义参数 vi /usr/local/zabbix/etc/zabbix_agentd.conf Include=/usr/local/zabbix/etc/z ...

  4. CukeTest+Puppeteer的Web自动化测试(一)

    CukeTest+Puppeteer的Web自动化测试 一.初识BDD.Cucumber(黄瓜).CukeTest 行为驱动开发(Behavior Driven Development,BDD).行为 ...

  5. hdu2093 考试排名(还需完善)

    下面代码是借鉴的.好多的知识点等着完善 #include <iostream> #include <string> #include <algorithm> usi ...

  6. 决策树purity/基尼系数/信息增益 Decision Trees

    目录 决策树简单描述 衡量purity的三种方法 Gini Coefficient Entropy熵 决策树简单描述 决策树的样子大概是这个样子的: 选择一个特征作为根节点,把这个特征划分成两个孩子节 ...

  7. [推荐]大量 Blazor 学习资源(一)

    前言 / Introduction Blazor 是什么? Blazor 允许您使用 C# 而不是 JavaScript 构建交互式 Web UI. Blazor 应用由使用 C#.HTML 和 CS ...

  8. VUE添加class绑定

    class     class的样式应用四种        1.数组用法        显示用标识符v-bind        :class="['red','thin']" 2. ...

  9. vue配置环境参考

    转  https://www.cnblogs.com/tu-0718/p/7521099.html 转 https://www.jianshu.com/p/1626b8643676 $ vue ini ...

  10. MarkDown语法使用(效果版本)

    function syntaxHighlighting() { var n = 33; var s = "hello, こんにちは"; console.log(s); } plai ...