programing

JSON 문자열을 URL에 포함시키기 위해 이스케이프하려면 어떻게 해야 합니까?

kingscode 2023. 4. 1. 15:06
반응형

JSON 문자열을 URL에 포함시키기 위해 이스케이프하려면 어떻게 해야 합니까?

Javascript를 사용하여 페이지 링크를 생성하고 싶습니다.페이지에 대한 파라미터는 JSON에서 시리얼화한 Javascript 배열에 있습니다.

그래서 다음과 같은 URL을 생성하려고 합니다.

http://example.com/?data="MY_JSON_ARRAY_HERE"

URL에 파라미터로 포함하기 위해 JSON 문자열(어레이 시리얼화)을 이스케이프하려면 어떻게 해야 합니까?

JQuery를 이용한 해결책이 있다면 정말 좋을 것 같습니다.

주의: 네, 페이지 파라미터는 많은 파라미터가 있기 때문에 배열로 해야 합니다.나중에 bit.ly을 사용하여 링크를 단축할 예정입니다.

encodeURIComponent(JSON.stringify(object_to_be_serialised))

나도 같은 일을 하려고 했는데, 문제는 내 URL이 너무 길어진다는 거야.저는 오늘 Bruno Jouhier의 jsUrl.js 라이브러리를 사용하여 해결책을 찾았습니다.

아직 충분히 테스트하지 않았습니다.다만, 다음의 예에서는, 3개의 다른 방법을 사용해 같은 큰 오브젝트를 부호화한 후의 문자열 출력의 문자 길이를 나타내고 있습니다.

  • 2651 문자 사용jQuery.param
  • 1691 문자 사용JSON.stringify + encodeURIComponent
  • 821 문자 사용JSURL.stringify

JSURL은 js 오브젝트의 urlEncoding에 가장 최적화된 포맷을 가지고 있습니다.

https://groups.google.com/forum/?fromgroups=#!topic/nodejs/ivdZuGCF86Q의 스레드는 인코딩 및 구문 분석을 위한 벤치마크를 보여 줍니다.

주의: 테스트 후 jsurl.js 라이브러리는 오브젝트 등의 ECMAScript 5 함수를 사용하는 것으로 보입니다.키, Array.map 및 Array.filter를 지정합니다.따라서 최신 브라우저에서만 작동합니다(ie 8 이하).단, 이러한 기능을 위한 폴리필은 더 많은 브라우저와 호환성이 있습니다.

를 사용하면 쿼리 문자열의 일부를 안전하게 URL 인코딩할 수 있습니다.

var array = JSON.stringify([ 'foo', 'bar' ]);
var url = 'http://example.com/?data=' + encodeURIComponent(array);

또는 이것을 AJAX 요구로서 송신하는 경우는, 다음과 같이 합니다.

var array = JSON.stringify([ 'foo', 'bar' ]);
$.ajax({
    url: 'http://example.com/',
    type: 'GET',
    data: { data: array },
    success: function(result) {
        // process the results
    }
});

사용.encodeURIComponent():

var url = 'index.php?data='+encodeURIComponent(JSON.stringify({"json":[{"j":"son"}]})),

대안을 제시하겠습니다.특히 URL 인코딩의 세부사항을 모두 동일하게 처리하지 않는 다양한 시스템을 다루는 경우 완전히 다른 인코딩을 사용하는 것이 더 쉬울 수 있습니다.

데이터를 URL 인코딩하지 않고 base64 인코딩할 수 있습니다.이 방법의 장점은 인코딩된 데이터가 매우 일반적이며 알파벳 문자로만 구성되며 때로는 후행 문자로도 구성됩니다.=예:

JSON 문자열 배열:

["option", "Fred's dog", "Bill & Trudy", "param=3"]

데이터는 URL로 되어 있습니다.URL은 URL로 인코딩되어 있습니다.data 파라미터:

"data=%5B%27option%27%2C+%22Fred%27s+dog%22%2C+%27Bill+%26+Trudy%27%2C+%27param%3D3%27%5D"

같은 base64 인코딩:

"data=WyJvcHRpb24iLCAiRnJlZCdzIGRvZyIsICJCaWxsICYgVHJ1ZHkiLCAicGFyYW09MyJd"

Base64 어프로치는 조금 짧을 수 있지만, 무엇보다 심플합니다.cURL 및 간에 를 이동하는 데 는 보통 따옴표, URL, 삽입 URL로 인해 합니다.%의 셸 를 사용합니다.Base64는 출력에 특수 문자가 없기 때문에 매우 중립적이고 휴대성이 뛰어납니다.

이치노를 들어 에서는 Kubernetes라고 합니다.kubectl edit secret는 부호화 문제를 피하고 인쇄 불가능한 바이너리 데이터를 쉽게 복사하여 붙여넣을 수 있도록 하기 위해 base64 내의 모든 비밀을 나타냅니다.

델란의 대답은 완벽하다.파라미터의 이름을 붙이거나 여러 개의 JSON 문자열을 개별적으로 전달하고 싶은 경우, 여기에 추가하는 것만으로 도움이 됩니다.

JQuery

var valuesToPass = new Array(encodeURIComponent(VALUE_1), encodeURIComponent(VALUE_2), encodeURIComponent(VALUE_3), encodeURIComponent(VALUE_4));

data = {elements:JSON.stringify(valuesToPass)}

PHP

json_decode(urldecode($_POST('elements')));

이게 도움이 됐으면 좋겠네요!

언급URL : https://stackoverflow.com/questions/6807180/how-to-escape-a-json-string-to-have-it-in-a-url

반응형