[javascript] decodeURIComponent와 decodeURI의 차이점은 무엇입니까?

JavaScript 함수 decodeURIComponent와 의 차이점은 무엇입니까 decodeURI?



답변

이 두 가지의 차이를 설명하기 위해 나 사이의 차이를 설명하게 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()

입력을 URL 인코딩 문자열로 변환

encodeURI()

입력을 URL로 인코딩하지만 전체 URL이 제공되었다고 가정하므로 프로토콜 (예 : http : // ) 및 호스트 이름 (예 :
www.stackoverflow.com )을 인코딩하지 않고 유효한 URL을 반환합니다 .

decodeURIComponent()그리고 decodeURI()위의 반대입니다


답변

decodeURIComponent는 &,?, # 등과 같은 URI 특수 마커를 디코딩하지만, decodeURI는 그렇지 않습니다.


답변

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