Frage

C #, ASP.NET 3.5

ich eine einfache URL mit einem codierten Abfragezeichenfolgeflag:

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

das wird schön: http: //localhost/test.aspx? a =% E1% ED% F3% FA (das ist gut)

Wenn ich debuggen test.aspx ich seltsam Dekodierung:

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

Warum soll die Abfrage-Zeichenfolge nicht die Werte entschlüsseln?

War es hilfreich?

Lösung

Sie könnten versuchen, HttpServerUtility.UrlEncode statt.

Microsoft-Dokumentation zu Microsoft.JScript.GlobalObject. entkommen heißt es, dass es nicht direkt im Code verwendet werden soll, den bestimmungsgemäßen.

Bearbeiten
Wie ich in den Kommentaren gesagt: Die beiden Methoden kodieren unterschiedlich und Request.QueryString erwartet, dass die von HttpServerUtility.UrlEncode verwendet Codierung, da sie intern HttpUtility.UrlDecode verwendet.

(HttpServerUtility.UrlEncode tatsächlich verwendet HttpUtility.UrlEncode intern.)

Sie können leicht den Unterschied zwischen den beiden Methoden sehen.
Erstellen Sie eine neue ASP.NET-Webanwendung, fügen Sie einen Verweis auf Microsoft.JScript dann den folgenden Code hinzu:

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

Das Ergebnis sollte sein:

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

����
áíóú
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top