wake-up-neo.com

ASP.Net URLEncode Et-Zeichen zur Verwendung in der Abfragezeichenfolge

Ich muss zu einer URL umleiten, die einen Parameter als Abfragezeichenfolge übergibt.

Dies kann ein kaufmännisches Und im Wert enthalten. sowie

string value = "This & That";
Response.Redirect("http://www.example.com/?Value=" + Server.UrlEncode(value));

Dies gibt jedoch http://www.example.com/?Value=This+&+That zurück.

Was muss ich verwenden, um diese Zeichenfolge zu kodieren?

EDIT: .__ Danke Luke, dass er auf das Offensichtliche hingewiesen hat, der Code funktioniert tatsächlich richtig. Ich entschuldige mich, meine Frage war doch keine gültige Frage!

Die Seite, die ich hatte, hatte viel alten Code, der anscheinend eine Art Codierung und Decodierung vornimmt, was den Anschein erweckt, als ob mein URL-Code nicht funktioniert.

Meine Lösung besteht leider darin, ein & vollständig zu verwenden, bis der betreffende Code neu geschrieben werden kann. Hassen Sie nicht einfach alten Code!

19
Robin Day

Die Dokumentation schlägt vor, dass Server.UrlEncode Et-Zeichen korrekt behandeln sollte.

Ich habe gerade Ihren genauen Code getestet und die zurückgegebene Zeichenfolge wurde korrekt codiert:

http://www.example.com/?Value=This+%26+That

24
LukeH

Technisch machen: 

value = value.Replace("&", "%26") 

wird den Trick tun.

BEARBEITEN: Bei den gesamten UrlEncode/HttpEncode-Methoden gibt es einige knifflige Probleme, die den Trick nicht ganz erfüllen. Ich habe vor einiger Zeit eine einfache Methode geschrieben, die sich als nützlich erweisen könnte. Dies sollte alle wichtigen Codierungsprobleme abdecken und es ist leicht, einen "Desanitizer" zu schreiben.

Protected Function SanitizeURLString(ByVal RawURLParameter As String) As String

      Dim Results As String

      Results = RawURLParameter    

      Results = Results.Replace("%", "%25")
      Results = Results.Replace("<", "%3C")
      Results = Results.Replace(">", "%3E")
      Results = Results.Replace("#", "%23")
      Results = Results.Replace("{", "%7B")
      Results = Results.Replace("}", "%7D")
      Results = Results.Replace("|", "%7C")
      Results = Results.Replace("\", "%5C")
      Results = Results.Replace("^", "%5E")
      Results = Results.Replace("~", "%7E")
      Results = Results.Replace("[", "%5B")
      Results = Results.Replace("]", "%5D")
      Results = Results.Replace("`", "%60")
      Results = Results.Replace(";", "%3B")
      Results = Results.Replace("/", "%2F")
      Results = Results.Replace("?", "%3F")
      Results = Results.Replace(":", "%3A")
      Results = Results.Replace("@", "%40")
      Results = Results.Replace("=", "%3D")
      Results = Results.Replace("&", "%26")
      Results = Results.Replace("$", "%24")

      Return Results

End Function
15
Dillie-O

Sie müssen Server.UrlEncode(string containing the ampersand) verwenden.

Ich habe es gerade getestet und der zurückgegebene Abfrage-String wurde korrekt codiert und dann decodiert.

HttpUtility hat für diese Operation nicht funktioniert.

2
Omgee Cares

dies ist jedoch korrekt, wenn Sie mehrere Parameter in der Abfragezeichenfolge haben.

zum Beispiel: & firstname = bob & secondName = "Tracy and John"

2
tigerdev

Ein weiteres Zeichen, das entkommen muss, ist der Apostroph. Ersetzen Sie es durch% 27.

string url = Server.UrlEncode(value).Replace("'", "%27);

HttpUtility.UrlEncode () und Server.UrlEncode () ersetzen dieses Zeichen nicht zusammen mit einigen anderen aus Gründen der Abwärtskompatibilität mit anderen .Net-Frameworks. Weitere Informationen finden Sie in diesem Microsoft-Artikel: http://connect.Microsoft.com/VisualStudio/feedback/details/214349/httputility-urlencode-does-not-encode-apostrophe

2
goku_da_master

Und wenn Sie einen Wert aus einer GridView erhalten, wird der & ampersand möglicherweise als "&amp;" angezeigt:

row.Cells[4].Text.ToString() = xxxx&amp;

In diesem Fall sollten Sie also Folgendes verwenden:

.Replace("&amp;", "%26")
1
Kinch

In .net Core Version 2.1 (Ende 2018) konnte ich Folgendes verwenden: 

System.Web.HttpUtility.UrlEncode(string_to_encode)
0
Eli