URL 인코딩에이 두 가지 방법 중 어느 것을 사용해야합니까?인코딩 URL에 encodeURI 또는 encodeURIComponent를 사용해야합니까?
답변
실제로 원하는 작업에 따라 다릅니다.
encodeURI는 입력이 인코딩이 필요한 일부 문자를 포함 할 수있는 완전한 URI라고 가정합니다.
에 encodeURIComponent는 특별한 의미 다 인코딩 할 것이다, 그래서 당신은 예와 같은
var world = "A string with symbols & characters that have special meaning?";
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(world);
http://xkr.us/articles/javascript/encode-compare/ 좋은 토론을 가지고로의 URI 구성 요소를 사용합니다. 요약을 인용하려면 :
"escape() 메서드는 필드에 공백이있는 양식을 생성 할뿐만 아니라 서버 측에서 공백으로 해석되는 + 문자를 인코딩하지 않습니다.이 단점과 사실로 인해 이 기능이 올바르게 비 ASCII 문자를 처리하는 데 실패 할 때마다 가능하면 탈출()의 사용을 피해야하는 가장 좋은 대안은 보통에 encodeURIComponent()이다
탈출을() 인코딩되지 않습니다.. @ */+
encodeURI() 메서드를 사용하면 URL의 일부인 쿼리 문자열과 달리 URI를 인코딩한다는 점에서 escape()보다 조금 더 특수합니다. 문자열을 b로 인코딩해야 할 때이 메서드를 사용하십시오 URI를 사용하고 인코딩되지 않은 상태로 남아있는 특정 문자가 필요한 모든 리소스에 사용됩니다. 이 메소드는 URI 내의 유효한 문자이므로 '문자를 인코딩하지 않습니다.
에 encodeURI()는 인코딩되지 않습니다 ~ @ # $ & *() = /; + '
마지막으로,에 encodeURIComponent() 단일 구성 요소를 인코딩 할 때 방법은 대부분의 경우에 사용한다!? URI의. 이 메소드는 많은 구성 요소가 포함될 수 있도록 URI의 특수 문자로 일반적으로 인식되는 특정 문자를 인코딩합니다. 이 메소드는 URI 내의 유효한 문자이므로 '문자를 인코딩하지 않습니다.
에 encodeURIComponent()가 인코딩되지 않습니다! ~ *() "
에 encodeURIComponent를() : 인수 (예 : 프로토콜, 호스트 이름, 경로 또는 쿼리 문자열 등) 부분이의 있다고 가정 . URI는 따라서는 portionsof URI를 분리하는 데 사용되는 문장 부호 문자를 이스케이프
에 encodeURI(). 경우 기존의 URL을
을 인코딩하는 데 사용됩니다 당신도 이러한 문자를 인코딩 할 : ! ' *) (
, 다음 을 해결책은 다음과 같습니다.
function fixedEncodeURIComponent(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, function(c) {
return '%' + c.charCodeAt(0).toString(16);
});
}
(source) 일반적 용도로서 encodeURIComponent
. 긴 이름을 사용하는 것이 더 구체적이라고 생각하면 겁 먹지 마라. 내게는 더 일반적으로 사용되는 방법이다.또한 테스트했기 때문에 encodeURI를 사용하지 마십시오. 제대로 인코딩 된 것처럼 보입니다. 사용하려는 의미가 아니며, 이름 필드에서 "Fred"를 사용하는 간단한 테스트가 작동하더라도, 나중에 앰퍼샌드 또는 해시 태그 추가와 같은 고급 텍스트를 사용하면 오류가 발생합니다. 이 이유에 대한 다른 대답을 살펴볼 수 있습니다.
- 1. PHP에서 encodeURI()?
- 2. post ajax 요청의 매개 변수를 인코딩하는 데 encodeURIComponent를 사용해야합니까?
- 3. lucene.net의 URL에 어떤 분석기를 사용해야합니까?
- 4. RSS 피드의 URL에 인코딩 키 - 값 쌍
- 5. URL에 슬래시를 인코딩 할 수 없습니다.
- 6. 자바 스크립트를 사용하여 인코딩 된 매개 변수를 URL에 추가하는 방법은 무엇입니까?
- 7. 상속 또는 구성을 사용해야합니까?
- 8. 포크 또는 스레드를 사용해야합니까?
- 9. CouchDB 또는 SimpleDB를 사용해야합니까?
- 10. AppDomain.CurrentDomain.BaseDirectory 또는 System.Environment.CurrentDirectory를 사용해야합니까?
- 11. ArrayList 또는 IList를 사용해야합니까?
- 12. 값 또는 키를 사용해야합니까?
- 13. em 또는 px를 사용해야합니까?
- 14. TNSNAMES.ORA 또는 tnsnames.ora를 사용해야합니까?
- 15. 리스너 또는 옵저버를 사용해야합니까?
- 16. DataInputStream 또는 BufferedInputStream을 사용해야합니까?
- 17. Pylons 또는 Pyramid를 사용해야합니까?
- 18. int 또는 UInt16을 사용해야합니까?
- 19. PHP 또는 ASP를 사용해야합니까?
- 20. 상속 또는 인터페이스를 사용해야합니까?
- 21. NSOperation 또는 NSRunLoop을 사용해야합니까?
- 22. MonoDroid 또는 Android를 사용해야합니까?
- 23. byte 또는 int를 사용해야합니까?
- 24. WPF 또는 SlimDX를 사용해야합니까?
- 25. msgsnd 또는 mq_send를 사용해야합니까?
- 26. ASP .NET MVC로 인코딩 매개 변수를 URL에 어떻게
- 27. MongoDB 또는 CouchDB 또는 다른 것을 사용해야합니까?
- 28. 언제 Indefinite_Hashed_Maps 또는 Hashed_Maps를 사용해야합니까?
- 29. eval() 또는 call_user_func()를 사용해야합니까?
- 30. iOS는 NSMutableArray 또는 NSMutableDictionary를 사용해야합니까?
또한보십시오 http://stackoverflow.com/a/3608791/632951 – Pacerier
1 개의 중요한 다름은'encodeURI'가'/'를 암호로 고쳐 쓰지 않을 것이라는 점을이다 :'encodeURIComponent ("ac/dc")'=>'ac % 2Fdc' 및'encodeURI ("ac/dc")'=>'ac/dc' – JoeRocc