Problem when retrieving text in JSON format containing line breaks with jQuery

前端 未结 9 2176
独厮守ぢ
独厮守ぢ 2020-12-02 18:05

I\'m having a strange problem when retrieving JSON formatted text. I use jQuery post to send some data (also JSON formatted) to the server (running PHP) which w

9条回答
  •  死守一世寂寞
    2020-12-02 19:00

    I encountered that problem while making a class in PHP4 to emulate json_encode (available in PHP5). Here's what i came up with :

    class jsonResponse {
        var $response;
    
        function jsonResponse() {
            $this->response = array('isOK'=>'KO','msg'=>'Undefined');
        }
    
        function set($isOK, $msg) {
            $this->response['isOK'] = ($isOK) ? 'OK' : 'KO';
            $this->response['msg'] = htmlentities($msg);
        }
    
        function setData($data=null) {
            if(!is_null($data))
                $this->response['data'] = $data;
            elseif(isset($this->response['data']))
                unset($this->response['data']);
        }
    
        function send() {
            header('Content-type: application/json');
            echo '{"isOK":"'.$this->response['isOK'].'","msg":'.$this->parseString($this->response['msg']);
            if(isset($this->response['data']))
                echo ',"data":'.$this->parseData($this->response['data']);
            echo '}';
        }
    
        function parseData($data) {
            if(is_array($data)) {
                $parsed = array();
                foreach ($data as $key=>$value)
                    array_push($parsed, $this->parseString($key).':'.$this->parseData($value));
                return '{'.implode(',', $parsed).'}';
            } else
                return $this->parseString($data);
        }
    
        function parseString($string) {
                $string = str_replace("\\", "\\\\", $string);
                $string = str_replace('/', "\\/", $string);
                $string = str_replace('"', "\\".'"', $string);
                $string = str_replace("\b", "\\b", $string);
                $string = str_replace("\t", "\\t", $string);
                $string = str_replace("\n", "\\n", $string);
                $string = str_replace("\f", "\\f", $string);
                $string = str_replace("\r", "\\r", $string);
                $string = str_replace("\u", "\\u", $string);
                return '"'.$string.'"';
        }
    }
    

    I followed the rules mentionned here. I only used what i needed but i figure that you can adapt it to your needs in the language your are using. The problem in my case wasn't about newlines as i originally thought but about the / not being escaped. I hope this prevent someone else from the little headache i had figuring out what i did wrong.

提交回复
热议问题