jQuery에서 줄 바꿈이 포함된 JSON 형식의 텍스트를 검색할 때 문제가 발생함
JSON 형식의 텍스트를 검색할 때 이상한 문제가 발생합니다. jQuery를 합니다.post정상적으로 동작하는 서버(PHP 실행 중)에 데이터를 송신합니다(JSON 형식도 있습니다).다음 jQuery를 하면 jQuery는 jQuery를 사용합니다.get콜백 메서드는 실행되지 않습니다.이 문제는 데이터가 JSON 형식이고 줄 바꿈이 포함된 경우에만 발생합니다.JSON 포맷을 사용하지 않으면 정상적으로 동작합니다.당황스러운 것은 데이터 업로드에 문제가 없다는 것입니다.
업로드 코드: (작업)
$.post("ajax/contents_ajax.php", {
'title': caption,
'text': frameText().getContent(),
'image_id': img
},
//Callback
다운로드 코드: (줄 바꿈은 사용할 수 없습니다)
$.get("ajax/contents_ajax.php", { 'get_item': id },
function (data){
//Never gets executed if data contains line breaks
}
,'json');
이 모든 문제는 TinyMCE 리치 텍스트 에디터가 옵션을 활성화 했음에도 불구하고 줄 바꿈을 어디에나 삽입해야 한다는 사실에서 비롯되었습니다.
remove_linebreaks : true
줄 바꿈이 있으면 좋겠지만, 코드가 깨지면 안 돼요.여기 문제가 무엇인지, 그리고 PHP로 서버상의 라인브레이크를 인코딩하는 방법을 가르쳐 주실 수 있습니까?
갱신하다
「」의 치환에 .'\n'''제대로 된 솔루션에 가깝습니다.가 삭제되었습니다.
function parse($text){
$parsedText = str_replace(chr(10), "", $text);
return str_replace(chr(13), "", $parsedText);
}
줄 바꿈을 유지하고 싶은 경우는, 다음과 같이 해 주세요.
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;
}
줄 바꿈은 문제가 아니라 JSON에서 적절하게 탈출해야 합니다.사용할 수 있는 경우 json_encode를 사용하면 자동으로 줄바꿈이 생략됩니다.그렇지 않으면 위의 Pim Jager와 같은 방법을 사용할 수 있지만 적절한 JSON 인코더가 가장 좋습니다.
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.'"';
}
}
나는 여기에 언급된 규칙을 따랐다.저는 필요한 것만 사용했지만, 사용하는 언어로 필요에 맞게 사용할 수 있습니다.내 경우 문제는 내가 처음에 생각했던 것처럼 새로운 라인이 아니라 탈출하지 못한 것에 관한 것이었다.제가 뭘 잘못했는지 알아내는 작은 두통을 다른 사람이 막아주길 바랍니다.
<br />와 같은 줄 바꿈이나 \n과 같은 줄 바꿈이 있습니까?하지만 PHP로 대체해 보세요.
<?php
$string = 'asdfasf<br />asdfasf';
echo str_replace('<br />', '', $strin); // Replace <br /> with '' (nothing)
?>
또는 urlencode를 확인합니다.
Turw와 비슷하지만 교환으로 \n
<?php
$json = str_replace('\n', '', $json);
?>
모든 줄 바꿈을 제거해야 합니다. jquery는 페일오버되지 않습니다.
줄 바꿈이 JSON에 있으면 안 됩니다.
이거 먹어봤어?
update tablename set field_name_with_\r\n_in_it = replace(field_name_with_\r\n_in_it,"\r\n","<br />")
저는 그게 잘 먹혔어요.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));
송신원: https://github.com/joomla/joomla-cms/issues/14502
를 사용할 수도 있습니다.<pre>모든 줄 바꿈과 공백을 유지하는 태그입니다.저도 그 문제에 부딪혀서 이 질문에 도달한 후 무작위로 사용하기로 결정했기 때문에 이 답변을 올렸습니다.<pre>대신 태그를 붙이다<div>그리고 그것은 많은 곳에서 원치 않는 등의 슬라쉬가 있었지만 문제로 해결되었다.\
언급URL : https://stackoverflow.com/questions/395379/problem-when-retrieving-text-in-json-format-containing-line-breaks-with-jquery
'programing' 카테고리의 다른 글
| wp rest api는 메타로 게시물을 가져옵니다. (0) | 2023.04.03 |
|---|---|
| Jackson이 단일 JSON 개체를 하나의 요소가 있는 배열로 해석하도록 합니다. (0) | 2023.04.03 |
| .json 파일에서 javascript를 읽으려면 어떻게 해야 하나요? (0) | 2023.04.03 |
| 모듈 빌드 실패:참조 오류: [BABEL] (0) | 2023.04.03 |
| oracle DATE와 TIMESTAMP의 차이점 (0) | 2023.04.03 |