다음과 같은 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()
imageURL에서 시도했지만 그것도 작동하지 않습니다.
답변
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);
답변
새로운 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))
답변
encodeURIComponent()
또는을 사용해서는 안됩니다 encodeURI()
. MDN 문서에 따라 fixedEncodeURIComponent()
및을 사용해야합니다 fixedEncodeURI()
.
에 관하여 encodeURI()
…
URL에 대한 최신 RFC3986을 따르고 자하는 경우 (IPv6의 경우) 대괄호가 예약되어 URL (예 : 호스트)의 일부가 될 수있는 항목을 구성 할 때 인코딩되지 않는 경우 다음 코드 조각이 도움이 될 수 있습니다.
function fixedEncodeURI(str) {
return encodeURI(str).replace(/%5B/g, '[').replace(/%5D/g, ']');
}
에 관하여 encodeURIComponent()
…
RFC 3986 (!, ‘, (,) 및 * 예약)을 더 엄격하게 준수하려면 이러한 문자에 형식화 된 URI 구분 용도가 없더라도 다음을 안전하게 사용할 수 있습니다.
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
그렇다면 차이점은 무엇입니까? fixedEncodeURI()
와 fixedEncodeURIComponent()
동일한 값 세트를 변환하지만, fixedEncodeURIComponent()
이 세트를 변환합니다 +@?=:*#;,$&
. 이 세트는 GET
매개 변수 ( &
, +
등), 앵커 태그 ( #
), 와일드 카드 태그 ( *
), 이메일 / 사용자 이름 부분 ( @
) 등에 사용됩니다.
예를 들어 – 당신이 사용하는 경우 encodeURI()
, user@example.com/?email=me@home
제대로 초를 전송하지 않습니다 @
(크롬 자연스럽게 종종처럼) 호환성을 처리 브라우저를 제외하고, 서버에.