JavaScript에서 URL을 인코딩 하시겠습니까?
질문
JavaScript를 사용하여 URL을 안전하게 인코딩하는 방법은 GET 문자열에 넣을 수 있습니까?
var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;
나는 그 두 번째 줄에 myURL 변수를 인코딩해야한다고 가정합니까?
답변
encodeuricomponent (str) 및 encodeuri (str) 내장 함수를 확인하십시오. 귀하의 경우에, 이것은 작동해야합니다 :
var myOtherUrl =
"http://example.com/index.html?url=" + encodeURIComponent(myUrl);
답변
당신은 세 가지 옵션이 있습니다.
except ()는 @ * / + encodeuri ()는 인코딩되지 않습니다 : ~! @ # $ & * () = : /,? + ' encodeuromponent ()는 인코딩되지 않습니다 : ~! * () '
그러나 귀하의 경우에 URL을 다른 페이지의 GET 매개 변수에 전달하려는 경우 Escape 또는 EncodeUricomponent를 사용해야하지만 엔코딩이 아닙니다.
스택 오버플로 질문을 참조하십시오. 최상의 연습 : Escape 또는 EncodeURI / EncodeComponent에 대한 추가 토론을 위해.
답변
encodeuricomponent ()를 붙이십시오.encodeURI () 함수는 URL에서 의미 론적 중요성을 갖는 많은 문자를 인코딩하는 것이 귀찮게되지 않습니다 (예 : "#", "?"및 "&").Escape ()는 더 이상 사용되지 않으며 서버의 인코딩 된 공간으로 해석 될 "+"문자를 인코딩하지 않으며 (여기서 다른 사람들이 가리키는 것은 아닌 문자가 아닌 다른 문자로 인코딩되지 않습니다).
encodeuri ()와 encodeuricomponent ()의 차이에 대한 좋은 설명이 있습니다.URI의 구성 요소로 안전하게 포함될 수 있도록 무언가를 인코딩하려면 encodeUricomponent ()를 사용하려고합니다.
답변
가장 좋은 답변은 쿼리 문자열 (및 다른 곳에서는 아무데도 없음)에서 encodeuricomponent를 사용하는 것입니다.
그러나 많은 API가 ""+ "를" "로 바꾸고 싶어합니다. 그래서 다음을 사용해야했습니다.
const value = encodeURIComponent(value).replace('%20','+');
const url = 'http://example.com?lang=en&key=' + value
탈출은 다른 브라우저에서 다르게 구현되며 EncodeURI는 많은 문자를 인코딩하지 않습니다 (같은).
@jochem이 아래에서 지적한 것으로, (각각의) 폴더 이름에서 encodeuricomponent ()를 사용할 수 있지만,이 모든 이유로이 API가 폴더 이름을 원하지 않으므로 일반 오래된 EncodeUricomponent는 훌륭하게 작동하지 않습니다.
예시:
const escapedValue = encodeURIComponent(value).replace('%20','+');
const escapedFolder = encodeURIComponent('My Folder'); // no replace
const url = `http://example.com/${escapedFolder}/?myKey=${escapedValue}`;
답변
QS NPM 패키지를 사용하는 것이 좋습니다
qs.stringify({a:"1=2", b:"Test 1"}); // gets a=1%3D2&b=Test+1
JS 객체와 함께 사용하는 것이 더 쉽고 모든 매개 변수에 대해 적절한 URL 인코딩을 제공합니다.
jQuery를 사용하는 경우 $ .param 메서드를 위해 이동합니다.IT URL은 각 값에서 이스케이프 메소드를 호출하는 것보다 쉽게 읽을 수있는 객체 매핑 필드를 값으로 인코딩합니다.
$.param({a:"1=2", b:"Test 1"}) // gets a=1%3D2&b=Test+1
답변
현대 솔루션 (2021)
다른 답변이 작성되었으므로 URLSearchParams API가 도입되었습니다.다음과 같이 사용할 수 있습니다.
const queryParams = { param1: 'value1', param2: 'value2' }
const queryString = new URLSearchParams(queryParams).toString()
// 'param1=value1¶m2=value2'
또한 비 URL 문자를 인코딩합니다.
구체적인 예제는 다음과 같이 사용할 것입니다.
const myUrl = "http://example.com/index.html?param=1&antherparam=2"; const myotherurl = new url ( "http://example.com/index.html"); myotherurl.search = 새 URLSearchParams ({URL : myURL}); console.log (myotherurl.tostring ());
이 솔루션은 여기에 언급되어 있습니다.
출처:https://stackoverflow.com/questions/332872/encode-url-in-javascript
최근댓글