Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery检索包含换行符的JSON格式文本时出现问题_Jquery_Json_Tinymce_Line Breaks - Fatal编程技术网

使用jQuery检索包含换行符的JSON格式文本时出现问题

使用jQuery检索包含换行符的JSON格式文本时出现问题,jquery,json,tinymce,line-breaks,Jquery,Json,Tinymce,Line Breaks,我在检索JSON格式的文本时遇到了一个奇怪的问题。我使用jQuerypost将一些数据(也是JSON格式的)发送到服务器(运行PHP),这很好。然后,当我使用jQueryget从服务器请求相同的数据时,回调方法永远不会执行。这仅在数据为JSON格式且数据包含换行符时发生。当我不使用JSON格式时,它工作得很好。让我困惑的是上传数据没有问题 上传代码:(作品) 下载代码:(不适用于换行符) 整个问题源于TinyMCE富文本编辑器似乎坚持在所有地方插入换行符,尽管我启用了该选项 remove_lin

我在检索JSON格式的文本时遇到了一个奇怪的问题。我使用jQuery
post
将一些数据(也是JSON格式的)发送到服务器(运行PHP),这很好。然后,当我使用jQuery
get
从服务器请求相同的数据时,回调方法永远不会执行。这仅在数据为JSON格式且数据包含换行符时发生。当我不使用JSON格式时,它工作得很好。让我困惑的是上传数据没有问题

上传代码:(作品)

下载代码:(不适用于换行符)

整个问题源于TinyMCE富文本编辑器似乎坚持在所有地方插入换行符,尽管我启用了该选项

remove_linebreaks : true
我确实喜欢换行符,但如果它们破坏了我的代码,就不会这样。有谁能告诉我这里的问题是什么,也许我可以用PHP在服务器上编码换行符


更新 虽然用
'
替换
'\n'
的建议不起作用,但它接近正确的解决方案。此代码删除了有问题的字符:

function parse($text){
    $parsedText = str_replace(chr(10), "", $text);
    return str_replace(chr(13), "", $parsedText);

}

您是否有像
这样的换行符或像\n这样的换行符? 但是试着用PHP替换它们

<?php
$string = 'asdfasf<br />asdfasf';
echo str_replace('<br />', '', $strin); // Replace <br /> with '' (nothing)
?>


或者像Terw一样签出,但要替换\n

<?php
 $json = str_replace('\n', '', $json);
?>


如果要删除所有换行符,jquery不应该使用fail-over标记,但是换行符不应该使用JSON。

换行符不是问题所在,而是需要在JSON中正确转义。如果您可以使用它,您可以使用它自动转义换行符。如果做不到这一点,您可以使用类似于Pim Jager的上述方法,不过最好使用合适的JSON编码器。

如果您想保留换行符,您可以尝试:

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

我在PHP4中创建一个类来模拟json_encode(在PHP5中提供)时遇到了这个问题。以下是我的想法:

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.'"';
    }
}
我遵守上面提到的规则。 我只使用了我需要的,但我想你可以用你正在使用的语言来适应你的需要。我的案例中的问题并不像我最初想的那样是关于换行,而是关于/没有被转义。我希望这能防止其他人因为我发现自己做错了什么而感到头痛。

你试过这个吗

update tablename set field_name_with_\r\n_in_it = replace(field_name_with_\r\n_in_it,"\r\n","<br />")
将tablename set field\u name\u更新为\u-it中的\r\n\u=替换(field\u-name\u更新为\r\n\u-it中的,“\r\n”,“
”)
它在mysql 5.0.45上对我起了作用,你也可以使用
标记来保留所有的换行符和空格。
<?php
...
function parseline($string){
  $string = str_replace(chr(10), "//n", $string);
  $string = str_replace(chr(13), "//n", $string);
  return $string;
}

echo parseline($string_with_line_breaks);//returns json readable text
我之所以发布这个答案,是因为我也遇到了这个问题,为了解决这个问题,我随机决定使用
标记,而不是
,问题解决了,尽管在许多地方有不必要的反斜杠
\

,很简单,只要尝试一下:


如果其他响应不起作用,则可以除去空格以外的所有空白字符

PHP
$text=trim(preg_replace(“/[\\x00-\\x19]+/”,“”,$text))


发件人:

我不确定,确切地说。当我浏览存储文本的数据库条目时,它只是在phpMyAdmin中显示为一个新行,因此我看不到特定的字符表示。
update tablename set field_name_with_\r\n_in_it = replace(field_name_with_\r\n_in_it,"\r\n","<br />")
<?php
...
function parseline($string){
  $string = str_replace(chr(10), "//n", $string);
  $string = str_replace(chr(13), "//n", $string);
  return $string;
}

echo parseline($string_with_line_breaks);//returns json readable text