json_encode()函数转码时,中文由于要转成Unicode会出现中文不能正常显示,看到有这样一个函数
function jsons_encode($array){
//定义一个新的数据
$newArray = array();
//遍历已有数组,将每个值 urlencode 一下
foreach($array as $key=>$value){
$newArray[$key] => urlencode($value);
}
//用urldecode将值反解
return urldecode(json_encode($newArray));
}
我写得代码如下
<?php
$file = file("readme.md");
function jsons_encode($array){
//定义一个新的数据
$newArray = array();
//遍历已有数组,将每个值 urlencode 一下
foreach($array as $key=>$value){
$newArray[$key] => urlencode($value);
}
//用urldecode将值反解
return urldecode(json_encode($newArray));
}
var_dump(jsons_encode($file));
?>
这里我打开的是一个utf-8编码的中文文本,测试时遇到这样的错误:
Parse error: syntax error, unexpected T_DOUBLE_ARROW in D:\wamp\www\test.php on line 8
应该是"=>"这个符号用的有问题,不过不知道如何修改,望大神们指点
//PHP版本5.4以上:
json_encode($data,JSON_UNESCAPED_UNICODE);
//PHP版本5.2以上才有json_encode/json_decode系列函数。
//PHP版本5.2-5.3,可以利用PHP的urlencode/urldecode的组合使用,可以达到类似的保留中文的效果。
//示例如下:代码里的MyJsonEncode和MyJsonDecode函数可以保留中文。
//数组转换保留为中文的JSON字符串
function MyJsonEncode($data){
return urldecode(json_encode(MyUrlEncode($data)));
//需要PHP版本5.4以上:
//return json_encode($data,JSON_UNESCAPED_UNICODE);
}
//保留中文的JSON字符串转换为数组
function MyJsonDecode($data){
$data = urlencode($data);
$data = str_replace("%7B",'{',$data);
$data = str_replace("%7D",'}',$data);
$data = str_replace("%5B",'[',$data);
$data = str_replace("%5D",']',$data);
$data = str_replace("%3A",':',$data);
$data = str_replace("%2C",',',$data);
$data = str_replace("%22",'"',$data);
return MyUrlDecode(json_decode($data,true));
}
//自定义的URL编码
function MyUrlEncode($data) {
//可对关联数组进行URL编码,并处理换行符
//内部递归调用
//用于MyJsonEncode函数调用
if(!is_array($data)){
$data = str_replace("\r",'\r',$data);
$data = str_replace("\n",'\n',$data);
$data = urlencode($data);
}
else {
foreach($data as $key=>$value) {
$data[MyUrlEncode($key)] = MyUrlEncode($value);
if((string)MyUrlEncode($key)!==(string)$key){
unset($data[$key]);
}
}
}
return $data;
}
//自定义的URL解码
function MyUrlDecode($data) {
//可对关联数组进行URL解码,并处理换行符
//内部递归调用
//用于MyJsonDecode函数调用
if(!is_array($data)){
$data = urldecode($data);
$data = str_replace('\r',"\r",$data);
$data = str_replace('\n',"\n",$data);
}
else {
foreach($data as $key=>$value) {
$data[MyUrlDecode($key)] = MyUrlDecode($value);
if((string)MyUrlDecode($key)!==(string)$key){
unset($data[$key]);
}
}
}
return $data;
}
//以上代码来自MyPHP开源函数库。
//GitHub开源地址:https://github.com/MoonLord-LM/MyPHP
//我的Blog:http://www.moonlord.cn
$newArray[$key] => urlencode($value);
这一句语法错误,单个赋值时不要使用=>
。
要么是在初始化数组时用$newArray = array('a' => 1);
要么是$newArray['a'] = 1;
这样的
… 为何要这么麻烦 …
json_encode( $array, JSON_UNESCAPED_UNICODE );
http://php.net/manual/en/function.json-encode.php