urlencoded를 디코딩하지 않은 객체를 요청합니다
-
10-07-2019 - |
문제
C#, ASP.NET 3.5
인코딩 된 쿼리 스트링이있는 간단한 URL을 만듭니다.
string url = "http://localhost/test.aspx?a=" +
Microsoft.JScript.GlobalObject.escape("áíóú");
멋지게됩니다 : http : //localhost/test.aspx? a =%e1%ed%f3%fa (좋아요)
debug test.aspx가 이상한 디코딩을받습니다.
string badDecode = Request.QueryString["a"]; //bad
string goodDecode = Request.Url.ToString(); //good
쿼리 스트링이 값을 해독하지 않는 이유는 무엇입니까?
해결책
당신은 사용하려고 노력할 수 있습니다 httpserveritility.urlencode 대신에.
Microsoft 문서 Microsoft.jscript.globalobject.escape 코드 내에서 직접 사용하는 것은 아니라고 말합니다.
편집하다:
의견에서 말했듯이 : 두 가지 메소드는 다르게 인코딩하고 request.querystring은 내부적으로 httputility.urldecode를 사용하므로 httpserverutility.urlencode에서 사용하는 인코딩을 기대합니다.
(httpserverutility.urlencode는 실제로 내부적으로 httputility.urlencode를 사용합니다.)
두 방법의 차이를 쉽게 볼 수 있습니다.
새 asp.net 웹 응용 프로그램을 작성하고 Microsoft.jscript에 대한 참조를 추가 한 다음 다음 코드를 추가하십시오.
protected void Page_Load(object sender, EventArgs e)
{
var msEncode = Microsoft.JScript.GlobalObject.escape("áíóú");
var httpEncode = Server.UrlEncode("áíóú");
if (Request.QueryString["a"] == null)
{
var url = "/default.aspx?a=" + msEncode + "&b=" + httpEncode;
Response.Redirect(url);
}
else
{
Response.Write(msEncode + "<br />");
Response.Write(httpEncode + "<br /><br />");
Response.Write(Request.QueryString["a"] + "<br />");
Response.Write(Request.QueryString["b"]);
}
}
결과는 다음과 같습니다.
%E1%ED%F3%FA
%c3%a1%c3%ad%c3%b3%c3%ba
����
áíóú
제휴하지 않습니다 StackOverflow