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

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


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;}


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.


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.