자바 스크립트 이스케이프 ("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) ...
답변
.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 ...입니다 : 일반 구문
공백 대신 +
은 올바른 URL 인코딩이므로 % 20으로 이스케이프합니다. this 기사 (Perl-URL 인코딩의 CGI 프로그래밍)를 참조하십시오.
+
은 JavaScript가 구문 분석 할 수있는 것이 아니기 때문에 자바 스크립트는 +
을 %20
으로 이스케이프합니다.
내가 아는 바로는 javas cript는 corectly URL을 인코딩하는 반면 .net 메서드는 그렇지 않습니다.
실제로 그들은 둘 다 잘못되었습니다!
JavaScript escape()
을 절대로 사용하지 마십시오. +
문자를 %2B
으로 인코딩하지 못하면서 모든 비 ASCII 문자를 비표준 %uNNNN
시퀀스로 인코딩합니다.
한편 Server.UrlEncode
은 정확하게 URL 인코딩이 아니며 일반적으로 쿼리 매개 변수로만 사용되어야하는 application/x-www-form-urlencoded
으로 인코딩됩니다. +
을 사용하여 경로 부분과 같이 양식 name=value
구조 외부의 공간을 나타내는 것은 잘못되었습니다.
이것은 오히려 불행합니다. 매개 변수가 아닌 경로 부분으로 인코딩 할 때 으로 인코딩 한 후에 %20
문자로 +
문자의 문자열 바꾸기를 시도 할 수 있습니다. 매개 변수에서 +
및 %20
도 동일합니다.
System.Uri.EscapeDataString()
serverside와 decodeURIComponent
클라이언트 측 작품을 사용하십시오.
유일한 문제는 System.Uri.EscapeDataString의 최대 문자열 길이가 0xfff0입니다. –
- 1. .ashx의 Server.UrlEncode
- 2. $ {# $ {(S %%) string // (\ KP1 | |) \ {* \} | \ % [Bbkf])}} 의미
- 3. std :: string s = (std :: string) "a"+ "b"+ "c"; 승인?
- 4. Server.UrlEncode for SQL?
- 5. Double.valueOf (String s)와 새로운 Double (String s)을 호출 할 때의 차이점은 무엇입니까?
- 6. "string"! = "string"
- 7. Java에서 Date (String s)와 비례하지 않는 정확히 일치합니까?
- 8. 왜 std :: string s ("?? <")는 {대신 <예상대로 ??
- 9. 목록에 요소를 추가하려고 시도 중 <String[,]> S = 새 목록 <String[,]>();
- 10. 차이점 a [] = "string"; char * p = "string";
- 11. String 표현
- 12. Mix s : Button 및 s : ToggleButton in s : ButtonBar
- 13. 문자열의 끝 찾기 : * s ++ VS * s 다음 s ++
- 14. Drupal String 구문 분석
- 15. PHP의 regex에서 [\ S \ s] *의 의미는 무엇입니까?
- 16. { "제목"; S : S : 5 43 :} MySQL 데이터베이스에
- 17. Perl, string replacement
- 18. 데이터를 식별하는 방법은 Server.UrlEncode()를 사용하여 인코딩 됨 Asp.net
- 19. C++ std :: string and string
- 20. objective-c string, string-formatter
- 21. System.Collections.Generic.Dictionary <string, string>
- 22. <String> to String
- 23. String 객체 인스턴스
- 24. 경로는 'S'
- 25. Java String [] to int []
- 26. Map <String, string>의 string []을 얻는 방법
- 27. JAXB to unmarshall <string> foobar</string>
- 28. Regex [\ S하지만 [[\ S?
- 29. Java의 String 객체가 변경되지 않습니까?
- 30. HashMap <String, String> temp = 새 HashMap <String, String>(); 패스 이미지
대신에? 전에 URLPathEncode를 사용하십시오. querystring http://hackup.com/questions/4145823/httpserverutility-urlpathencode-vs-httpserverutility-urlencode?lq=1&hl=ko –
하하, 실제로는 가장 유익한 대답입니다. 불행히도 거의 2 년이 지나면 실제로 유용합니다. 오 잘 적어도 나는 미래의 참고를 위해 알 것이다. –
:) URLPathEncode가 백분율 기호와 같은 문자를 이스케이프 처리하지 않기 때문에 실제로 Uri.EscapeDataString이 사용됩니다. http://stackoverflow.com/questions/9400445/how-do-you-correctly-escape-a-document -name-in-net –