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!
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:
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
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.
dies ist jedoch korrekt, wenn Sie mehrere Parameter in der Abfragezeichenfolge haben.
zum Beispiel: & firstname = bob & secondName = "Tracy and John"
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
Und wenn Sie einen Wert aus einer GridView
erhalten, wird der & ampersand
möglicherweise als "&"
angezeigt:
row.Cells[4].Text.ToString() = xxxx&
In diesem Fall sollten Sie also Folgendes verwenden:
.Replace("&", "%26")
In .net Core Version 2.1 (Ende 2018) konnte ich Folgendes verwenden:
System.Web.HttpUtility.UrlEncode(string_to_encode)