2010-03-25 2 views
4

자바 스크립트 이스케이프 ("My File.doc")는 "My File.doc"를 반환하는 반면 "Server.UrlEncode ("My File.doc " 내 % 20File.doc ". 늘어나는만큼 자바 스크립트는 corectly URL을 문자열 인코딩 반면 이해합니다. NET 메서드는 아닙니다. 그것은 실제로 연습 그런 식으로 작동하는 것 같다 http://somesite/My+File.doc 나는 "firefox를 사용하여 테스트 할 수있는 모든 경우에"내 File.doc "을 가져 오지 않을 것입니다. 및 IIS, http://somesite/My%20File.doc 잘 작동하는 반면. 뭔가 빠졌거나 Server.UrlEncode가 제대로 작동하지 않습니까?Server.UrlEncode (string s) ...

+0

대신에? 전에 URLPathEncode를 사용하십시오. querystring http://hackup.com/questions/4145823/httpserverutility-urlpathencode-vs-httpserverutility-urlencode?lq=1&hl=ko –

+0

하하, 실제로는 가장 유익한 대답입니다. 불행히도 거의 2 년이 지나면 실제로 유용합니다. 오 잘 적어도 나는 미래의 참고를 위해 알 것이다. –

+0

:) URLPathEncode가 백분율 기호와 같은 문자를 이스케이프 처리하지 않기 때문에 실제로 Uri.EscapeDataString이 사용됩니다. http://stackoverflow.com/questions/9400445/how-do-you-correctly-escape-a-document -name-in-net –

답변

7

.Net의 URLEncode/URLDecode를 사용하여 "왕복"인코딩의 경우 자바 스크립트 encodeURIComponent()/decodeURIComponent()를 사용하십시오.

편집

지금까지 내가 아는 한, 역사적으로 "+"공간 문자 (ASCII 20)를위한 특별한 대체으로 URL 인코딩에 사용되어왔다. 구현시 '+'대체가 포함 된 특수 문자로 공간을 고려하지 않으면 ASCII 코드 (즉 '% 20')를 사용하여 이스케이프 처리해야합니다.

http://bytes.com/topic/php/answers/5624-urlencode-vs-rawurlencode에 상황에 대한 토론이 정말 있습니다. 그건 그렇고, 결정적이지는 않습니다. RFC 2396은 '% 20'군중이있는 예약되지 않은 표현없이 다른 문자로 공간을 뭉개집니다. (포럼 한 discusion 통해) '+'군중들과

RFC 1630면 ... 쿼리 문자열 내에서

는 더하기 기호 는 공간에 대한 속기 표기법으로 예약되어 있습니다. 따라서 실제 더하기 기호 을 코딩해야합니다. 이 방법은 으로 공백을 허용하지 않는 시스템 인 에서 쿼리 URI를 쉽게 전달할 수 있도록했습니다. WWW에서 보편적 자원 식별자

RFC 1738 - - 범용 리소스 로케이터 (URL)

RFC 2396 - 통일 자원 식별자 (URI)

또한, 핵심의 RFC는

RFC 1630 ...입니다 : 일반 구문

3

공백 대신 +은 올바른 URL 인코딩이므로 % 20으로 이스케이프합니다. this 기사 (Perl-URL 인코딩의 CGI 프로그래밍)를 참조하십시오.

+은 JavaScript가 구문 분석 할 수있는 것이 아니기 때문에 자바 스크립트는 +%20으로 이스케이프합니다.

4

내가 아는 바로는 javas cript는 corectly URL을 인코딩하는 반면 .net 메서드는 그렇지 않습니다.

실제로 그들은 둘 다 잘못되었습니다!

JavaScript escape()을 절대로 사용하지 마십시오. + 문자를 %2B으로 인코딩하지 못하면서 모든 비 ASCII 문자를 비표준 %uNNNN 시퀀스로 인코딩합니다.

한편 Server.UrlEncode은 정확하게 URL 인코딩이 아니며 일반적으로 쿼리 매개 변수로만 사용되어야하는 application/x-www-form-urlencoded으로 인코딩됩니다. +을 사용하여 경로 부분과 같이 양식 name=value 구조 외부의 공간을 나타내는 것은 잘못되었습니다.

이것은 오히려 불행합니다. 매개 변수가 아닌 경로 부분으로 인코딩 할 때 으로 인코딩 한 후에 %20 문자로 + 문자의 문자열 바꾸기를 시도 할 수 있습니다. 매개 변수에서 +%20도 동일합니다.

2

System.Uri.EscapeDataString() serverside와 decodeURIComponent 클라이언트 측 작품을 사용하십시오.

+0

유일한 문제는 System.Uri.EscapeDataString의 최대 문자열 길이가 0xfff0입니다. –

관련 문제