json_encode 处理后的数据是null
原因: json_encode($str) 中的字符串 必须是 utf-8的格式:

--------------------------------
问题描述:
返回的json数据:
<?php
$array = array();
$rows = $parameter["list"];
$User = $parameter["User"];
$userId = $parameter["userId"];
$data = '';
$data.= '
<table class="table table-striped table-hover">
<tbody>';
foreach ($rows["rows"] as $row){
$data.= '<tr>
<td width="40px"><input type="checkbox" name="checkItem" value="'.$row->id.'" /></td>';
$data.= '<td width="200px">'.BaseUtil::setEntities($row->title).'</td>';
$User->getDataById($row->userId);
$data.= '<td width="200px">'.BaseUtil::setEntities($User->userName).'</td>';
$data.= '<td width="200px">'.'<img style="width:100px;" src="'.UPLOAD_HTTP.$row->icon.'"/>'.'</td>';
$data.= '<td width="200px">'.BaseUtil::setEntities($row->orderBy).'</td>';
$data.= '<td width="200px">'.BaseUtil::setEntities($row->isOpenEnum[$row->isOpen]).'</td>';
$data.= '<td width="200px">
<button type="button" class="btn btn-success btn-sm" onclick="base.addTab(\'知识点管理\',\'action.php?c=KnowledgeProxy&a=index&courseId='.$row->id.'\',\'课程管理\')">
<span class="glyphicon glyphicon-pencil" style="color:#fff; cursor:pointer;"></span>
知识点管理
</button>
</td>';
$data.= '<td width="100px">
<span class="table-list-btn glyphicon glyphicon-edit" title="编辑" style="color:#2e6da4; cursor:pointer;" onclick="base.showCourseUpdate('.$row->id.')"></span>
<span class="table-list-btn glyphicon glyphicon-trash" title="删除" style="color:#d43f3a; cursor:pointer;" onclick="base.removeCourse('.$row->id.')"></span>
</td>
</tr>';
}
$data.= '</tbody></table>';
$array ["data"] = $data;
$array ["total"] = $rows ["total"];
echo BaseUtil::toJson($array);
?>
setEntities 方法:
/**
* 转字符换为实体
*
* @param unknown $string
* @return string
*/
public static function setEntities($string) {
return htmlentities ( $string);
}
出现的问题是 :
1)在公司里面 返回的json数据是正常的 . 例如:

2) 但是如果 是在家里 ,就出现错误. data 是null
{data: null , total:3}
同样的代码 ,只是因为在公司和 家中的php环境不同 就出现了不同的结果.
-----------
测试如果不使用:BaseUtil::setEntities($User->userName) 处理数据 ,直接用$User->userName 的话,在家中 就可以正常使用了.
BaseUtil::setEntities 是对函数 htmlentities的封装.
/**
* 转字符换为实体
*
* @param unknown $string
* @return string
*/
public static function setEntities($string) {
return htmlentities ( $string );
}
查阅php手册中关于 htmlentities的描述:


可见,htmlentities 是要设置转换的格式的, 如果没有设置, 默认读取 php配置文件中的 default_charset;
同时在 php 5.4 之后 ,默认的转码为 utf-8 .
同时 ,json_encode 要求 字符串必须是utf-8的.
-------
所以问题 就是 我公司的电脑的php版本大于 5.4 ,使用 封装的BaseUtil::setEntities 自动转为 utf-8 ; 家中的电脑的php版本 低于5.4
----
解决办法:
第一: 将家中电脑的php.ini 的 default_charset 设置为 utf-8 , 但是没有起作用.
第二: 重写 BaseUtil::setEntities ,指定格式 . 此时家中 可以正常使用了.
/**
* 转字符换为实体
*
* @param unknown $string
* @return string
*/
public static function setEntities($string) {
return htmlentities ( $string, ENT_COMPAT , 'utf-8' );
}
json_encode 处理后的数据是null的更多相关文章
- SqlServer触发器判断对表操作类型(增、删、改)并将修改后的数据映射到新表
该文章为原创,日后可能会根据实际开发经验和网友评论,进行相应地方修改,为获得最新博客动态,望在转发博客的时候注明出处. 触发器要实现的功能: (1)获取对表Table1数据操作操作类型(insert. ...
- GDAL 遥感图像处理后的数据保存为图像文件的实现方法
在遥感图像处理中,GDAL库不仅能读取和处理大部分的遥感图像数据,而且还能够实现图像处理后将数据保存为图像的功能. 本文就详细介绍如何将内存中的图像数据保存为.tif格式. 首先,遥感数据处理完,保存 ...
- opencv face-detection 代码分析 (1)人脸识别后的数据
2014,3,16 老师的工作建议如下: 1. 与四民沟通下,把openCV这边的源代码和调用接口发给四民同时抄送给我. 2. 根据openCV的实时检测结果,实现对屏幕的调整(下周一前基本实 ...
- SQLSERVER中返回修改后的数据
在公司看到同事写了个SQL2005的新特性的文章,觉得很实用,在这里和大家分享下. 这种技术主要是用到了inserted和deleted虚拟表,这两张表相信大家都很熟悉.以前我们主要是在触发器中使用. ...
- servlet 表单加上multipart/form-data后request.getParameter获取NULL(已解决)
先上结论(可能不对,因为这是根据实践猜测而来,欢迎指正) 表单改为multipart/form-data传值后,数据就不能通过普通的request.getParameter获取. 文件和文件名通过Fi ...
- php数组使用json_encode函数中文被编码成null的原因和解决办法
大写的囧,提客户处理问题,前端的APP一直在叽叽咂咂,说收到的值是null,弄了半天原来是这个问题,记录下吧 json格式在开发中用的十分广泛.在php中json_encode函数可以直接将数组转成 ...
- PDA手持扫描资产标签,盘点完成后将数据上传到PC端,固定资产系统查看盘点结果
固定资产管理系统介绍: 致力于研发条码技术.集成条码系统的专业性公司,针对客户的不同需求,提供一站式的企业条码系统解决方案:包括功能强大的软件系统.安全可靠的无线网络.坚固耐用的硬件系统.灵活易用的管 ...
- 如何用perl将表格中不同列的数据进行拼凑,然后将拼凑后的数据用“|”连接在一起
最近写了一个perl脚本,实现的功能是将表格中其中两列的数据进行拼凑,然后将拼凑后的数据用“|”连接在一起. 表格内容如下: 员工号码 员工姓名 职位 入职日期 1001 张三 销售 1980/12/ ...
- 【转】hive导入数据出现NULL
在把hdfs上数据迁移到hive中的表时,若出现数据位NULL,是因为没有指定列分隔符. 由于hive默认的分隔符是/u0001(Ctrl+A),为了平滑迁移,需要在创建表格时指定数据的分割符号,语法 ...
随机推荐
- 区间逼近 牛客寒假1 小a的排列
做法:模拟 萌区间也就是这个区间里的数是一段连续的数 做法的话是先找出题目x,y的位置,记为l,r,然后找出l,r内的最大最小值,又因为萌区间要求数是连续的,就从这段连续数最小的开始到最大的,确定缩放 ...
- 『Re』正则表达式模块_常用方法记录
『Re』知识工程作业_主体识别 一个比较完备的正则表达式介绍 几个基础函数 re.compile(pattern, flags=0) 将正则表达式模式编译成一个正则表达式对象,它可以用于匹配使用它的m ...
- 『Python』skimage图像处理_旋转图像
一段简短的实现图像旋转的代码,使用了skimage库,据说和PIL相比,skimage对numpy等科学计算库的支持更好,这里是为了完成师兄给的帮他修改程序的任务,如果以后有需求的话可能会对pytho ...
- springboot(十九)使用actuator监控应用
微服务的特点决定了功能模块的部署是分布式的,大部分功能模块都是运行在不同的机器上,彼此通过服务调用进行交互,前后台的业务流会经过很多个微服务的处理和传递,出现了异常如何快速定位是哪个环节出现了问题? ...
- 基于Helm和Operator的K8S应用管理的分享
一.为啥要用helm 对于一些微服务架构来说,会有不同的服务在上面运行,你可能要管理诸如deployment.service.有状态的Statefulset.权限的控制等等.你会发现,部署应用后还会有 ...
- css中伪类与伪元素的区别
一:伪类:1:定义:css伪类用于向某些选择器添加特殊效果. 伪类其实与普通的css类相类似,可以为已有的元素添加样式,但是他只有处于dom无法描述的状态下才能为文档树中的元素添加样式,所以将其称为伪 ...
- 设备指纹(Device Fingerprinting)是什么?
简单来讲,设备指纹是指可以用于标识出该设备的设备特征或者独特的设备标识.设备指纹因子通常包括计算机的操作系统类型,安装的各种插件,浏览器的语言设置及其时区 .设备的硬件ID,手机的IMEI,电脑的网卡 ...
- django学习之——创建项目
创建项目让我迷茫了会: 直接cmd 执行django-admin.py startproject pro_name 肯定是不行的 必须cd到 D:\Program Files\Python3.3.5 ...
- RCNN 目标识别基本原理
RCNN- 将CNN引入目标检测的开山之作 from:https://zhuanlan.zhihu.com/p/23006190 前面一直在写传统机器学习.从本篇开始写一写 深度学习的内容. 可能需要 ...
- VMware进入BIOS
在虚拟机关机状态下,点击“虚拟机”--“电源”--“打开电源时进入固件”即自动启动进入bios