一、调用接口后获取的json数据将其json_decode()后为对象格式。不好对其进行处理。
解决:
只要在json_decode($str,true);设置第二个参数为true;就会把json形式数据转化成数组。
二、想对外提供接口,要从数据库中取出数据,json_encode()后,中文数据出现编码问题。
如:\u901a\u8baf\u5f55\uff0c\u662f\u738b\u67cf\u5143\u81ea\u4e3b\u5f00\
原因分析:
在存储到数据库时!MySQL 不会存储 unicode 字符:MySQL 仅支持从基本的多语种平面字符 (0×0000-0xFFFF)。请尝试存储一个同义词相反:)
更新: MySQL 5.5.3 上 (其中尚未 GA), 支持补充字符如果您使用 UTF8MB4 编码。
json_encode中文的时候,会把每个中文字符encode成“uxxxx”,而存进数据库的时候,“”被屏蔽了,直接变成”uxxxx”
解决:
方法①:对json_encode()设置第二个参数
$json = json_encode($array,JSON_UNESCAPED_UNICODE);//php版本>5.4
方法②:遍历已有数组,将每个值 urlencode 一下,再用urldecode将值反解
foreach($arr as $key=>&$value){
if($key == "Result"){
foreach($value as $k=>&$v){
$value[$k] = urlencode($v);
}
}else{
$arr[$key] = urlencode($value);
}
}
//用urldecode将值反解
$html = urldecode(json_encode($arr));
三、对调用接口得到的数据在前台进行分页显示
解决:
将json格式的数据json_decode($str;true)转换成数组后,利用array_slice()函数对数组进行分页。
/* 构造分页地址 */
if (isset($this->request->get['page'])) {
$page = $this->request->get['page'];
if($page<1){
$page = 1;
}
} else {
$page = 1;
}
$count = 5;
$start = ($page-1)*$count; //计算每次分页的开始位置
$end = $start+$count;
$countpage = ceil($data['num']/$count);//计算总页面数
$pagedata = array();
$pagedata = array_slice($result,$start,$end);
$data['result'] = $pagedata;
$data['countpage'] = $countpage;
$data['page'] = $page;
$data['keyword'] = $keyword;