답변:
이 두 가지의 차이를 설명하기 위해 나 사이의 차이를 설명하게 encodeURI
하고 encodeURIComponent
.
주요 차이점은 다음과 같습니다.
encodeURI
기능은 전체 URI에서 사용하기위한 것입니다.encodeURIComponent
함수는 구분 기호 (; /? : @ & = + $, #) 사이에있는 부분 인 .. well .. URI 구성 요소에서 사용하도록 고안되었습니다.따라서 encodeURIComponent
이러한 구분 기호는 특수 문자가 아닌 텍스트로 간주되기 때문에 인코딩됩니다.
디코드 함수의 차이점으로 돌아가서, 각 함수는 특수 문자의 의미와 처리를 처리하여 해당 인코딩 대응 물에 의해 생성 된 문자열을 디코드합니다.
encodeURIComponent / decodeURIComponent ()는 URI 부분에서 텍스트 문자열을 서로 연결하고 분리하기 위해 거의 항상 사용하려는 쌍입니다.
덜 일반적이고 잘못 이름이 지정된 encodeURI : 실제로는 fixBrokenURI라고합니다. 그것은 거의 URI 인 것을 취하지 만 공백과 같은 유효하지 않은 문자를 가지고 실제 URI로 바꿉니다. 사용자 입력에서 유효하지 않은 URI를 수정하는 데 유효하게 사용되며 IRI (유니 코드 문자가 포함 된 URI)를 일반 URI (% 이스케이프 처리 된 UTF-8을 사용하여 비 ASCII로 인코딩)로 변환하는 데 사용할 수도 있습니다. ).
decodeURI는 몇 가지 특수 문자를 제외하고 decodeURIComponent와 동일한 문자를 디코딩합니다. 그것은 encodeURI의 역수로 제공되지만, 원래 넣은 것과 똑같이 리턴한다고 믿을 수는 없습니다. 예를 들어보십시오. decodeURI(encodeURI('%20 '));
.
encodeURI의 이름을 fixBrokenURI ()로 지정해야하는 경우 decodeURI ()를 동일한 이름으로 potentialBreakMyPreviouslyWorkingURI ()라고 할 수 있습니다. 나는 그것을 어디에도 사용할 수 없다고 생각할 수있다. 기피.
js> s = "http://www.example.com/string with + and ? and & and spaces";
http://www.example.com/string with + and ? and & and spaces
js> encodeURI(s)
http://www.example.com/string%20with%20+%20and%20?%20and%20&%20and%20spaces
js> encodeURIComponent(s)
http%3A%2F%2Fwww.example.com%2Fstring%20with%20%2B%20and%20%3F%20and%20%26%20and%20spaces
콜론과 슬래시 및 더하기 문자를 추가로 인코딩하고 쿼리 문자열에 사용하기 위해 encodeURI
공백과 일부 (예 : 인쇄 할 수없는) 문자를 인코딩하여 "안전한"URI를 생성하는 것처럼 보입니다 encodeURIComponent
. +와?의 인코딩 &는 쿼리 문자열의 특수 문자이므로 &가 여기에서 특히 중요합니다.
나는 같은 질문을했지만 여기서 대답을 찾지 못했기 때문에 실제로 차이점이 무엇인지 알아 내기 위해 몇 가지 테스트를 수행했습니다. URL / URI와 관련이없는 무언가에 대한 인코딩이 필요하기 때문에이 작업을 수행했습니다.
encodeURIComponent("A")
"A"를 반환하고 "A"를 "% 41"로 인코딩하지 않습니다decodeURIComponent("%41")
"A"를 반환합니다.encodeURI("A")
"A"를 반환하고 "A"를 "% 41"로 인코딩하지 않습니다decodeURI("%41")
"A"를 반환합니다.즉, 영숫자 문자를 인코딩하지 않아도 문자를 디코딩 할 수 있습니다. 하나...
encodeURIComponent("&")
"% 26"을 반환합니다.decodeURIComponent("%26")
"&"를 반환합니다.encodeURI("&")
"&"를 반환합니다.decodeURI("%26")
"% 26"을 반환합니다.encodeURIComponent가 모든 문자를 인코딩하지는 않지만 decodeURIComponent는 % 00과 % 7F 사이의 값을 디코딩 할 수 있습니다.
참고 : 유니 코드 값이 아닌 경우 % 7F 이상의 값을 디코딩하려고하면 스크립트가 "URI 오류"로 실패합니다.
encodeURIComponent 이스케이프되지 않음 :
A-Z a-z 0-9 - _ . ! ~ * ' ( )
encodeURI () 이스케이프되지 않음 :
A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI
decodeURIComponent("%C3%A9") == "é"; unescape("%C3%A9") == "é";