programing

URL 매개 변수를 인코딩하는 방법은 무엇입니까?

skycolor 2023. 10. 19. 22:08
반응형

URL 매개 변수를 인코딩하는 방법은 무엇입니까?

다음과 같은 URL에 매개 변수를 전달하려고 합니다.

http://www.foobar.com/foo?imageurl=

그리고 다른 API에 의해 자체적으로 생성되는 이미지 URL과 같은 파라미터를 전달하고 싶습니다. 이미지에 대한 링크는 다음과 같습니다.

http://www.image.com/?username=unknown&password=unknown

그러나 URL을 사용하려고 할 때:

http://www.foobar.com/foo?imageurl=http://www.image.com/?username=unknown&password=unknown

동작되지 않습니다.

사용해 본 적도.encodeURI()그리고.encodeURIComponent()화상으로URL, 그리고 그것도 안 됩니다.

PHP 포함

echo urlencode("http://www.image.com/?username=unknown&password=unknown");

결과

http%3A%2F%2Fwww.image.com%2F%3Fusername%3Dunknown%26password%3Dunknown

자바스크립트 사용:

var myUrl = "http://www.image.com/?username=unknown&password=unknown";
var encodedURL= "http://www.foobar.com/foo?imageurl=" + encodeURIComponent(myUrl);

데모: http://jsfiddle.net/Lpv53/

새 ES6 사용Object.entries(), 그것은 재미있는 작은 둥지를 만듭니다.map/join:

const encodeGetParams = p => 
  Object.entries(p).map(kv => kv.map(encodeURIComponent).join("=")).join("&");

const params = {
  user: "María Rodríguez",
  awesome: true,
  awesomeness: 64,
  "ZOMG+&=*(": "*^%*GMOZ"
};

console.log("https://example.com/endpoint?" + encodeGetParams(params))

URL 검색 매개변수 사용:

const params = new URLSearchParams()
params.set('imageurl', 'http://www.image.com/?username=unknown&password=unknown')
return `http://www.foobar.com/foo?${params.toString()}`

해보세요.encodeURI()그리고.encodeURIComponent()당신 자신이...

console.log(encodeURIComponent('@#$%^&*'));

입력:@#$%^&*. 출력:%40%23%24%25%5E%26*. 그럼 잠깐만, 어떻게 된 거지?*? 왜 변환이 안 된 거지?TLDR: 당신은 정말로 원하고. 긴 이야기를...

사용하면 안 됩니다.encodeURIComponent()아니면encodeURI(). MDN 설명서에 따라 및 를 사용해야 합니다.

...에 관하여

URL용으로 예약된 대괄호(IPv6용)를 사용하여 URL의 일부가 될 수 있는 것을 구성할 때 인코딩되지 않는 최신 RFC3986을 따르려면 다음 코드 스니펫이 도움이 될 수 있습니다.

function fixedEncodeURI(str) { return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']'); }

...에 관하여

RFC 3986(!, ', ', ', '*를 예약함)을 준수하기 위해 이 문자들은 공식화된 URI 구분 용도가 없음에도 불구하고 다음을 안전하게 사용할 수 있습니다.

function fixedEncodeURIComponent(str) { return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { return '%' + c.charCodeAt(0).toString(16); }); }

그렇다면, 차이점은 무엇일까요?fixedEncodeURI()그리고.fixedEncodeURIComponent()동일한 값 집합을 변환하지만,fixedEncodeURIComponent()또한 다음 집합을 변환합니다.+@?=:*#;,$&. 이 집합은 다음에서 사용됩니다.GET매개 변수(&,+, 등), 앵커 태그(#, 와일드카드 태그(*, 이메일/username 부분(@) 등.

를 들어 - 다음을 사용하는 경우encodeURI(),user@example.com/?email=me@home두번째를 제대로 보내지 않을 것입니다.@(Chrome이 자주 하는 것처럼) 호환성을 처리하는 브라우저를 제외하고는 서버로 이동합니다.

언급URL : https://stackoverflow.com/questions/8135132/how-to-encode-url-parameters

반응형