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

前端 未结 9 2118
独厮守ぢ
独厮守ぢ 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 18:46

    You can also use <pre> tag that will keep all line breaks and white spaces. I am posting this answer because i also encounter that problem and for solutions i reached to this question and after that I randomly decided to use <pre> tag instead of <div> and that solved by problem although at many places there were unwanted back slashes \

    0 讨论(0)
  • 2020-12-02 18:47

    If the other responses didn't work, it's possible to strip all whitespace characters except the space.

    PHP $text = trim(preg_replace( "/[\\x00-\\x19]+/" , '' , $text));

    From: https://github.com/joomla/joomla-cms/issues/14502

    0 讨论(0)
  • 2020-12-02 18:51

    Line breaks aren't the issue so much as they need to be properly escaped in JSON. If it's available to you, you can use json_encode which automatically escapes newlines. Failing that, you can use something like Pim Jager's method above, though a proper JSON encoder would be best.

    0 讨论(0)
  • 2020-12-02 18:54

    If you would like to keep the line breaks, you might try:

    function parse($text) {
        // Damn pesky carriage returns...
        $text = str_replace("\r\n", "\n", $text);
        $text = str_replace("\r", "\n", $text);
    
        // JSON requires new line characters be escaped
        $text = str_replace("\n", "\\n", $text);
        return $text;
    }
    
    0 讨论(0)
  • 2020-12-02 18:59

    Have you tried this

    update tablename set field_name_with_\r\n_in_it = replace(field_name_with_\r\n_in_it,"\r\n","<br />")
    

    It worked for me on mysql 5.0.45

    0 讨论(0)
  • 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.

    0 讨论(0)
提交回复
热议问题