문제

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

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