문제

QueryString이 urlencoded 또는 asp.net에 퍼센트 문자가있을 때 요청 객체에서 실제 쿼리 스트링을 얻는 방법은 무엇입니까?

기본적으로 다음과 같은 URL이있는 경우 다음과 같습니다. Default.aspx?p=%b4, "%b4"로 문자열이 채워진 문자열을 어떻게 얻습니까?

Request.QueryString["p"] 인쇄 할 수없는 문자를 반환합니다.

Request.RawUrl default.aspx? p =%ufffd를 반환합니다. "

Request.Url.AbsoluteUri 기본값을 반환합니다 .aspx? p =%ef%bf%bd

"%b4"를 어떻게 되돌릴 수 있습니까?

도움이 되었습니까?

해결책

나는 이것을 더 파고 들었고, 이것의 원인을 알고 있다고 생각합니다. HTTP 클라이언트는 URL을 제대로 인코딩하지 않은 서버에 URL을 제출하고 있습니다. 구체적으로 URL에는 잘못된 문자가 있습니다.

재현하려면 URL 끝에 다음을 IE8에 붙여 넣습니다. default.aspx?p=´

와이어 위로가는 바이트를 검사하는 경우 (예 : 바이올리니스트), 실제 HEX B4 문자가 URL에서 클라이언트에서 서버로 전송되는 것을 볼 수 있습니다. URL은 0x80의 숯 코드로 제한되기 때문에 URL의 불법 문자입니다 (0x80보다 큰 숯 코드는 백분율에 이스케이프해야 함).

따라서 클라이언트는 잘못된 문자를 전달하고 있으며 서버는 가짜 문자를%EF%BF%BD로 대체합니다. 유니 코드 교체 문자 (U+0FFD), 이것은 로컬 인코딩에서 동등한 캐릭터가 발생할 때 발생합니다.

Afaik, 이것은 IE의 버그입니다. Firefox에 동일한 URL을 입력하면 Firefox가 URL을 올바르게 인코딩합니다 ( '대신 %B4). 또한 AFAIK에서도 문제는 유효하지 않은 문자를 IE의 주소 표시 줄에 수동으로 붙여 넣을 때만 발생합니다. 동일한 문자가 링크에 존재하는 경우, IE는 URL을 올바르게 인코딩하는 것으로 보입니다 (적어도 테스트 한 경우).

따라서 누가이 가짜 URL을 보내고 있는지 알아 내고 URL을 올바르게 인코딩하라고 지시해야합니다!

다른 팁

ASP.NET은 request.queryString [ "키"]를 수행 할 때 자동으로 URL 디코딩을합니다. 다시 인코딩하면됩니다.

HttpUtility.UrlEncode(Request.QueryString["p"])
HttpContext.Current.Request.ServerVariables["QUERY_STRING"]

원시 쿼리 문자열을 반환합니다

나는 같은 문제가 있었다. QueryString에 위배되는 동안 JavaScript "Escape ( 'Text % Text')"를 추가하여 해결했습니다!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top