search

Home  >  Q&A  >  body text

php json_decode stripcslashes

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()解码了
PHP中文网PHP中文网2901 days ago284

reply all(3)I'll reply

  • PHP中文网

    PHP中文网2017-04-10 15:05:44

    JSON在编码的时候已经转义了,addslashes和stripcslashes都是多此一举。

    reply
    0
  • 迷茫

    迷茫2017-04-10 15:05:44

    //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

    reply
    0
  • 怪我咯

    怪我咯2017-04-10 15:05:44

    字符串直接写入表示的是正常的转义. 话说encode完的不就可以直接decode么,为什么还要做这种多余的动作……

    reply
    0
  • Cancelreply