programing

JavaScript를 사용하여 줄바꿈 문자를 포함하는 JSON 문자열을 이스케이프하려면 어떻게 해야 합니까?

shortcode 2022. 10. 26. 23:00
반응형

JavaScript를 사용하여 줄바꿈 문자를 포함하는 JSON 문자열을 이스케이프하려면 어떻게 해야 합니까?

값이 새로운 행 문자를 갖는 JSON 문자열을 형성해야 합니다.이는 이스케이프 후 AJAX 콜을 사용하여 게시해야 합니다.JavaScript를 사용하여 문자열을 이스케이프하는 방법을 제안할 수 있습니다.jQuery는 사용하지 않습니다.

과 JSON을 ..stringify()ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ, ㄴ..replace() 및 합니다.\n\\n

편집:

제가 알기로는 문자열의 모든 특수 문자를 이스케이프하기 위한 잘 알려진 JS 라이브러리는 없습니다.하지만 체인으로 묶을 수도 있고.replace()하다

var myJSONString = JSON.stringify(myJSON);
var myEscapedJSONString = myJSONString.replace(/\\n/g, "\\n")
                                      .replace(/\\'/g, "\\'")
                                      .replace(/\\"/g, '\\"')
                                      .replace(/\\&/g, "\\&")
                                      .replace(/\\r/g, "\\r")
                                      .replace(/\\t/g, "\\t")
                                      .replace(/\\b/g, "\\b")
                                      .replace(/\\f/g, "\\f");
// myEscapedJSONString is now ready to be POST'ed to the server. 

지만그그그건찍,,,,,,????깔끔하게 의 체인 접속이 합니다..replace() 이 을 '콜'이라는escapeSpecialChars()요.prototype chainStringescapeSpecialChars()스트링 스트링

다음과 같은 경우:

String.prototype.escapeSpecialChars = function() {
    return this.replace(/\\n/g, "\\n")
               .replace(/\\'/g, "\\'")
               .replace(/\\"/g, '\\"')
               .replace(/\\&/g, "\\&")
               .replace(/\\r/g, "\\r")
               .replace(/\\t/g, "\\t")
               .replace(/\\b/g, "\\b")
               .replace(/\\f/g, "\\f");
};

이 함수를 정의하면 코드 본문은 다음과 같이 단순해집니다.

var myJSONString = JSON.stringify(myJSON);
var myEscapedJSONString = myJSONString.escapeSpecialChars();
// myEscapedJSONString is now ready to be POST'ed to the server

사용자 667073의 제안대로 백슬래시 교환을 먼저 재주문하고 견적 교환을 수정하는 것 이외에는

escape = function (str) {
  return str
    .replace(/[\\]/g, '\\\\')
    .replace(/[\"]/g, '\\\"')
    .replace(/[\/]/g, '\\/')
    .replace(/[\b]/g, '\\b')
    .replace(/[\f]/g, '\\f')
    .replace(/[\n]/g, '\\n')
    .replace(/[\r]/g, '\\r')
    .replace(/[\t]/g, '\\t');
};

저도 당신처럼 html 오브젝트를 포함한 JSON의 특수 이스케이프 문자를 대체하기 위해 몇 가지 코멘트를 알아보고 글을 올렸습니다.

JSON 오브젝트 내의 특수문자를 삭제하고 json 오브젝트 내의 html을 렌더링하는 것이 목적입니다.

이것이 내가 한 일이며 매우 사용하기 쉬웠으면 좋겠다.

먼저 JSON.string을 하고 결과를 JSON.parse했습니다.

예:

JSON.parse(JSON.stringify(jsonObject));

Pure Javascript를 사용하여 문제를 해결했습니다.

알렉스가 한 답변은 다소 부정확하다고 말씀드리기엔 유감입니다만, 부드럽게 말씀드리면,

  • Alex가 이스케이프를 시도하는 일부 문자는 이스케이프할 필요가 전혀 없습니다( & ' 및 ' 등).
  • \b는 백스페이스 문자가 아니라 단어 경계 일치입니다.
  • 이스케이프해야 하는 문자는 처리되지 않습니다.

이 기능

escape = function (str) {
    // TODO: escape %x75 4HEXDIG ?? chars
    return str
      .replace(/[\"]/g, '\\"')
      .replace(/[\\]/g, '\\\\')
      .replace(/[\/]/g, '\\/')
      .replace(/[\b]/g, '\\b')
      .replace(/[\f]/g, '\\f')
      .replace(/[\n]/g, '\\n')
      .replace(/[\r]/g, '\\r')
      .replace(/[\t]/g, '\\t')
    ; };

더 나은 근사치인 것 같습니다.

작은 따옴표 업데이트

function escape (key, val) {
    if (typeof(val)!="string") return val;
    return val      
        .replace(/[\\]/g, '\\\\')
        .replace(/[\/]/g, '\\/')
        .replace(/[\b]/g, '\\b')
        .replace(/[\f]/g, '\\f')
        .replace(/[\n]/g, '\\n')
        .replace(/[\r]/g, '\\r')
        .replace(/[\t]/g, '\\t')
        .replace(/[\"]/g, '\\"')
        .replace(/\\'/g, "\\'"); 
}

var myJSONString = JSON.stringify(myJSON,escape);

이것은 오래된 게시물이지만 angular.from.Json과 JSON.stringify를 사용하는 사람들에게는 여전히 도움이 될 수 있습니다.escape()는 권장되지 않습니다.대신 이것을 사용하세요.

var uri_enc = encodeURIComponent(uri); //before you post the contents
var uri_dec = decodeURIComponent(uri_enc); //before you display/use the contents.

참조: http://www.w3schools.com/jsref/jsref_decodeuricomponent.asp

JSON.stringify에는 두 번째 파라미터도 있습니다.따라서 보다 우아한 솔루션은 다음과 같습니다.

function escape (key, val) {
    if (typeof(val)!="string") return val;
    return val
      .replace(/[\"]/g, '\\"')
      .replace(/[\\]/g, '\\\\')
      .replace(/[\/]/g, '\\/')
      .replace(/[\b]/g, '\\b')
      .replace(/[\f]/g, '\\f')
      .replace(/[\n]/g, '\\n')
      .replace(/[\r]/g, '\\r')
      .replace(/[\t]/g, '\\t')
    ; 
}

var myJSONString = JSON.stringify(myJSON,escape);

이것은 오래된 질문이지만 모든 사례가 해결된 것은 아니기 때문에 해결이 잘 되지 않았습니다.난 마침내 여기 을 할 수 있는 답을 찾았다.

excape와 encode uri 컴포넌트를 모두 사용한 통합 솔루션을 게시합니다.

// implement JSON stringify serialization
JSON.stringify = JSON.stringify || function (obj) {
    var t = typeof (obj);
    if (t != "object" || obj === null) {
        // simple data type
        if (t == "string") obj = '"'+obj+'"';
        return String(obj);
    }
    else {
        // recurse array or object
        var n, v, json = [], arr = (obj && obj.constructor == Array);
        for (n in obj) {
            v = obj[n]; t = typeof(v);
            if (t == "string") v = '"'+v+'"';
            else if (t == "object" && v !== null) v = JSON.stringify(v);
            json.push((arr ? "" : '"' + n + '":') + String(v));
        }
        var rawString = (arr ? "[" : "{") + String(json) + (arr ? "]" : "}");
       return rawString;
    }
};
function escape (key, val) {
    if (typeof(val)!="string") return val;

    var replaced = encodeURIComponent(val);
    return replaced;
}

JSON.stringifyEscaped = function(obj){
    return JSON.stringify(obj,escape);
}

콜 중 에서도 같은 했는데, 이 에서는 "Ajax"가 사용되고 .JSON[ Text area ]알겠습니다여기에 제시된 해결책은 나에게 효과가 없었다. Javascript의 ★★Javascript를 했습니다..escape이치노 다음 이 됩니다.JSON , , , , , , 을 사용하여 ..unescape.

하시는 것이 JSON.parse(yourUnescapedJson);

서버측 스크립팅 언어가 PHP일 경우 json_encode()를 사용합니다.json_encode()줄바꿈 및 기타 예기치 않은 토큰을 회피합니다(PHP를 사용하지 않을 경우 스크립트 언어에서 유사한 기능을 찾습니다).

으로 ' '를 사용합니다.$.parseJSON()완!!

EDIT가 api로 되어 있는지 합니다.Content-Type: application/json클라이언트 http 라이브러리가 stringifying과 http 요구 본문을 백그라운드에서 해석하는 경우 및/또는 둘 다.클라이언트 라이브러리는 swagger에 의해 생성되었습니다.클라이언트 라이브러리가 미리 스트링된 바디를 스트링하고 있었기 때문에 이러한 해크를 적용해야 했습니다.body: “jsonString” 「」가 아닌 「」body: { ...normal payload }를 api로 되었습니다.Content-Type: text/plain루트의 JSON 스트링화/파싱이 삭제되어 이러한 해크는 필요 없습니다.API의 "consumes" 또는 "products" 부분만 변경할 수 있습니다. 여기를 참조하십시오.

: 따옴표가 않는 한 시키는 경우( 「」: JSON 「」 「JSON 」 「JSON」 「JSON」 「JSON」 「JSON」 「 」"{\"foo\": true}"2번 JSON.stringify(JSON.stringify(bar))

built in jQuery.serialize()를 사용하여 텍스트 영역에서 값을 추출하여 입력을 urlencode했습니다.프로는 검색으로 모든 특수 문자를 직접 바꿀 필요가 없고, 새로운 줄과 이스케이프 html도 유지한다는 것입니다.시리얼라이즈가 기능하려면 입력 필드에 이름 속성이 있어야 합니다.또, 이스케이프 된 문자열에도 같은 속성이 추가되어 치환할 필요가 있습니다.네가 찾는 게 아닐 수도 있지만 나한테는 효과가 있어.

var myinputfield = jQuery("#myinputfield"); 
var text = myinputfield.serialize();
text = text.replace(myinputfield.attr('name') + '=','');

RegExp 단일 라인, 다음 함수를 사용합니다.

function escapeJSON(string) {
    return string.replace(/[\n"\&\r\t\b\f]/g, '\\$&');
}

어떤 형식의 Ajax를 사용하든 웹에서 CGI 서버로부터 받은 응답 형식에 대한 자세한 문서가 부족한 것 같습니다.여기에서는 jQuery에 의해 자동으로 처리되거나 Javascript 시스템 또는 라이브러리의 JSON 구문 분석 호출을 수동으로 사용하든 상관없이 반환된 텍스트 또는 json 데이터의 새 행을 이스케이프하여 JSON 변환에서 무한 루프(잠금되지 않은 예외 발생)를 방지해야 한다고 지적하고 있습니다.

프로그래머가 이 문제를 투고하는 경우 각각 부적절한 해결책이 제시되며(대부분 \n을 송신측에서 \n으로 대체한다) 문제는 폐기됩니다.Windows 패스명 등 제어 이스케이프 시퀀스를 잘못 삽입하는 문자열 값을 전달하면 부적절한 것이 드러납니다.예를 들어 "C:\Cris\Roberts.php"는 문자열 {"file":"C:"의 JSON 변환을 일으킬 수 있는 제어 문자 ^c 및 ^r을 포함합니다.\Cris\Roberts.php"}을 클릭합니다.이러한 값을 생성하는 한 가지 방법은 의도적으로 PHP 경고 및 오류 메시지를 서버에서 클라이언트로 전달하는 것입니다.이것은 합리적인 생각입니다.

정의상 Ajax는 백그라운드에서 HTTP 연결을 사용합니다.이러한 접속은 GET 및 POST를 사용하여 데이터를 전달합니다.이들 두 연결 모두 제어 문자를 포함한 잘못된 구문을 피하기 위해 전송된 데이터를 인코딩해야 합니다.

이것은 솔루션이라고 생각되는 것을 구성하기에 충분한 힌트를 준다(더 많은 테스트가 필요하다). 즉, 데이터를 인코딩하기 위해 PHP(송신) 측에서 rawurlencode를 사용하고 데이터를 디코딩하기 위해 Javascript(수신) 측에서 unescape를 사용한다.텍스트 문자열 전체에 적용할 수도 있고 JSON 내의 값에만 적용할 수도 있습니다.

만약 이 아이디어가 맞다면, 모든 수준의 프로그래머들이 이 문제를 완전히 해결할 수 있도록 간단한 예를 구성할 수 있습니다.

이것은 매우 오래된 투고인 것 같습니다.-) 하지만 복잡한 코드를 사용하지 않고 100% 사용할 수 있는 최선의 회피책은 base64로 인코딩/복호화하는 두 가지 기능을 모두 사용하는 것입니다.이것들은 atob()과 btoa()입니다.가장 쉽고 최선의 방법은 탈출할 문자를 놓쳤더라도 걱정할 필요가 없습니다.

조지

인코딩 사용문자열을 인코딩하는 URIComponent().

예: var myEscaped JSONString = 인코딩URIComponent(JSON.stringify(myJSON));

웹 서버가 자동으로 동일한 작업을 수행하므로 디코딩할 필요가 없습니다.

언급URL : https://stackoverflow.com/questions/4253367/how-to-escape-a-json-string-containing-newline-characters-using-javascript

반응형