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
제대로 초를 전송하지 않습니다 @
(크롬 자연스럽게 종종처럼) 호환성을 처리 브라우저를 제외하고, 서버에.