<code>echo $res=addslashes(json_encode(array('content'=>'中文'))); //{\"content\":\"\\u4e2d\\u6587\"} echo stripcslashes($res);//{"content":"\u4e2d\u6587"} 直接echo stripcslashes( '{\"content\":\"\\u4e2d\\u6587\"}');//{"content":"u4e2du6587"} \不见了???不能用json_decode()解码了 </code>
<code>echo $res=addslashes(json_encode(array('content'=>'中文'))); //{\"content\":\"\\u4e2d\\u6587\"} echo stripcslashes($res);//{"content":"\u4e2d\u6587"} 直接echo stripcslashes( '{\"content\":\"\\u4e2d\\u6587\"}');//{"content":"u4e2du6587"} \不见了???不能用json_decode()解码了 </code>
JSON在编码的时候已经转义了,addslashes和stripcslashes都是多此一举。
//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函数可以保留中文。
<code>//数组转换保留为中文的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; } </code>
//以上代码来自MyPHP开源函数库。
//GitHub开源地址:https://github.com/MoonLord-LM/MyPHP
//我的Blog:http://www.moonlord.cn
字符串直接写入表示的是正常的转义. 话说encode完的不就可以直接decode么,为什么还要做这种多余的动作……