Domanda

C #, ASP.NET 3.5

Creo un semplice URL con una stringa di query codificata:

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

che diventa piacevolmente: http: //localhost/test.aspx? a =% E1% ED% F3% FA (va bene)

Quando debug test.aspx ottengo una strana decodifica:

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

Perché QueryString non dovrebbe decodificare i valori?

È stato utile?

Soluzione

Potresti provare a usare HttpServerUtility.UrlEncode invece.

Documentazione Microsoft su Microsoft.JScript.GlobalObject. escape afferma che non è previsto che venga utilizzato direttamente dal tuo codice.

Modifica
Come ho detto nei commenti: i due metodi codificano in modo diverso e Request.QueryString prevede la codifica utilizzata da HttpServerUtility.UrlEncode poiché utilizza internamente HttpUtility.UrlDecode.

(HttpServerUtility.UrlEncode attualmente utilizza HttpUtility.UrlEncode internamente.)

Puoi facilmente vedere la differenza tra i due metodi.
Creare una nuova applicazione Web ASP.NET, aggiungere un riferimento a Microsoft.JScript quindi aggiungere il seguente codice:

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

Il risultato dovrebbe essere:

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

����
áíóú
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top