2010-12-27 5 views

답변

194

실제로 원하는 작업에 따라 다릅니다.

encodeURI는 입력이 인코딩이 필요한 일부 문자를 포함 할 수있는 완전한 URI라고 가정합니다.

에 encodeURIComponent는 특별한 의미 다 인코딩 할 것이다, 그래서 당신은 예와 같은

var world = "A string with symbols & characters that have special meaning?"; 
var uri = 'http://example.com/foo?hello=' + encodeURIComponent(world); 
66

URL 구성 요소 (쿼리 문자열 매개 변수)에 넣을 문자열을 인코딩하는 경우 encodeURIComponent을 호출해야합니다.

기존 URL을 인코딩하는 경우 encodeURI으로 전화하십시오.

+1

만약 내가 아약스를 사용한다면 어떻게 php에 전달되는 URL을 디코드합니까? –

+5

그렇지 않습니다. 웹 서버가 자동으로 그렇게합니다. – Quentin

+0

@Aditya : 그것은 당신이하는 일에 달려 있습니다. – SLaks

29

http://xkr.us/articles/javascript/encode-compare/ 좋은 토론을 가지고로의 URI 구성 요소를 사용합니다. 요약을 인용하려면 :

"escape() 메서드는 필드에 공백이있는 양식을 생성 할뿐만 아니라 서버 측에서 공백으로 해석되는 + 문자를 인코딩하지 않습니다.이 단점과 사실로 인해 이 기능이 올바르게 비 ASCII 문자를 처리하는 데 실패 할 때마다 가능하면 탈출()의 사용을 피해야하는 가장 좋은 대안은 보통에 encodeURIComponent()이다

탈출을() 인코딩되지 않습니다.. @ */+

encodeURI() 메서드를 사용하면 URL의 일부인 쿼리 문자열과 달리 URI를 인코딩한다는 점에서 escape()보다 조금 더 특수합니다. 문자열을 b로 인코딩해야 할 때이 메서드를 사용하십시오 URI를 사용하고 인코딩되지 않은 상태로 남아있는 특정 문자가 필요한 모든 리소스에 사용됩니다. 이 메소드는 URI 내의 유효한 문자이므로 '문자를 인코딩하지 않습니다.

에 encodeURI()는 인코딩되지 않습니다 ~ @ # $ & *() = /; + '

마지막으로,에 encodeURIComponent() 단일 구성 요소를 인코딩 할 때 방법은 대부분의 경우에 사용한다!? URI의. 이 메소드는 많은 구성 요소가 포함될 수 있도록 URI의 특수 문자로 일반적으로 인식되는 특정 문자를 인코딩합니다. 이 메소드는 URI 내의 유효한 문자이므로 '문자를 인코딩하지 않습니다.

에 encodeURIComponent()가 인코딩되지 않습니다! ~ *() "

8

에 encodeURIComponent를() : 인수 (예 : 프로토콜, 호스트 이름, 경로 또는 쿼리 문자열 등) 부분이의 있다고 가정 . URI는 따라서는 portionsof URI를 분리하는 데 사용되는 문장 부호 문자를 이스케이프

에 encodeURI(). 경우 기존의 URL을

0

을 인코딩하는 데 사용됩니다 당신도 이러한 문자를 인코딩 할 : ! ' *) (, 다음 을 해결책은 다음과 같습니다.

function fixedEncodeURIComponent(str) { 
    return encodeURIComponent(str).replace(/[!'()*]/g, function(c) { 
    return '%' + c.charCodeAt(0).toString(16); 
    }); 
} 

(source) 일반적 용도로서 encodeURIComponent

+5

당신은 URL에서 그 charachters를 탈출해서는 안됩니다. – Arashsoft

+0

인용 된 문서에서 "이 문자에는 정형화 된 URI 구분 사용이 없습니다" – caesarsol

+0

@caesarsol 그래서 내 대답을 편집해야합니까? 인용 부호가 무엇을 의미하는지 이해할 수 없기 때문에 당신의 생각을 알려주세요. –

-2

. 긴 이름을 사용하는 것이 더 구체적이라고 생각하면 겁 먹지 마라. 내게는 더 일반적으로 사용되는 방법이다.또한 테스트했기 때문에 encodeURI를 사용하지 마십시오. 제대로 인코딩 된 것처럼 보입니다. 사용하려는 의미가 아니며, 이름 필드에서 "Fred"를 사용하는 간단한 테스트가 작동하더라도, 나중에 앰퍼샌드 또는 해시 태그 추가와 같은 고급 텍스트를 사용하면 오류가 발생합니다. 이 이유에 대한 다른 대답을 살펴볼 수 있습니다.

관련 문제