Question

C #, ASP.NET 3.5

Je crée une URL simple avec une chaîne de requête codée:

string url = "http://localhost/test.aspx?a=" +
     Microsoft.JScript.GlobalObject.escape("áíóú");

qui devient bien: http: //localhost/test.aspx? a =% E1% ED% F3% FA (c'est bien)

Lorsque je débogue test.aspx, j'obtiens un décodage étrange:

string badDecode = Request.QueryString["a"];  //bad
string goodDecode = Request.Url.ToString();    //good

Pourquoi le QueryString ne décoderait-il pas les valeurs?

Était-ce utile?

La solution

Vous pouvez essayer d'utiliser HttpServerUtility.UrlEncode à la place.

Documentation de Microsoft sur Microsoft.JScript.GlobalObject. d'échappement indique qu'il n'est pas destiné à être utilisé directement à partir de votre code.

Modifier:
Comme je l'ai dit dans les commentaires: Les deux méthodes encodent différemment et Request.QueryString attend l'encodage utilisé par HttpServerUtility.UrlEncode puisqu'il utilise HttpUtility.UrlDecode en interne.

(HttpServerUtility.UrlEncode utilise en fait HttpUtility.UrlEncode en interne.)

Vous pouvez facilement voir la différence entre les deux méthodes.
Créez une nouvelle application Web ASP.NET, ajoutez une référence à Microsoft.JScript, puis ajoutez le code suivant:

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"]);
  }
}

Le résultat devrait être:

%E1%ED%F3%FA
%c3%a1%c3%ad%c3%b3%c3%ba

����
áíóú
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top