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
'programing' 카테고리의 다른 글
Angularjs 인수가 문자열을 얻은 함수가 아닙니다. (0) | 2023.10.19 |
---|---|
C의 배열에서 요소 제거 (0) | 2023.10.19 |
UI SegmentedControl 선택한 세그먼트 색상 (0) | 2023.10.14 |
비교 시 변수 앞에 상수를 두는 이유는 무엇입니까? (0) | 2023.10.14 |
jQuery 검증 플러그인을 사용한 사용자 지정 날짜 형식 (0) | 2023.10.14 |