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