Hat C# ein Äquivalent zu JavaScripts encodeURIComponent()?
In JavaScript:
encodeURIComponent("©√") == "%C2%A9%E2%88%9A"
Gibt es eine Entsprechung für C#-Anwendungen? Zum Escapen von HTML-Zeichen habe ich Folgendes verwendet:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"&#" + ((int)m.Value[0]).ToString() + ";");
Aber ich bin mir nicht sicher, wie man das Match in das richtige hexadezimale Format umwandelt, das JS verwendet. Zum Beispiel dieser Code:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));
Gibt "%a9%221a" für "©√" zurück, anstelle von "%C2%A9%E2%88%9A". Es sieht so aus, als müsste ich den String in Bytes aufteilen oder so etwas.
Bearbeiten: Dies ist für eine Windows-App, die einzigen verfügbaren Elemente in System.Web sind: AspNetHostingPermission, AspNetHostingPermissionAttribute und AspNetHostingPermissionLevel.
Antwort #1
Uri.EscapeDataString oder HttpUtility.UrlEncode ist der richtige Weg, um eine Zeichenfolge zu maskieren, die Teil einer URL sein soll.
Nehmen wir zum Beispiel den String "Stack Overflow":
HttpUtility.UrlEncode("Stack Overflow")-->"Stack+Overflow"Uri.EscapeUriString("Stack Overflow")-->"Stack%20Overflow"Uri.EscapeDataString("Stack + Overflow")--> Kodiert auch"+" zu "%2b"---->Stack%20%2B%20%20Overflow
Nur das letzte ist korrekt, wenn es als tatsächlicher Teil der URL verwendet wird (im Gegensatz zum Wert eines der Abfragezeichenfolgenparameter).
Antwort #2
HttpUtility.HtmlEncode/Dekodieren
HttpUtility.UrlEncode/Dekodieren
Sie können einen Verweis auf die System.Web-Assembly hinzufügen, wenn sie in Ihrem Projekt nicht verfügbar ist
Antwort #3
Ich habe versucht, ein vollständig kompatibles Analogon von javascripts encodeURIComponent für C# zu erstellen, und nach meinen 4-stündigen Experimenten habe ich dies gefunden
C# CODE:
string a = "!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");
das Ergebnis ist: !%40%23%24%25%5e%26*()_%2b%20some%20text%20here%20%d0%b0%d0%bb%d0%b8%20%d0%bc%d0%b0%d0%bc%d0%b5%d0%b4%d0%be%d0%b2%20%d0%b1%d0%b0%d0%ba%d1%83
Nachdem Sie es mit Javascripts decodeURLComponent(); decodiert haben
Sie erhalten Folgendes: !@#$%^&*()_+ etwas Text hier vor einigen Monaten
Vielen Dank für Ihre Aufmerksamkeit
Antwort #4
System.Uri.EscapeUriString() schien nichts zu bewirken, aber System.Uri.EscapeDataString() hat bei mir funktioniert.
Antwort #5
Für eine Windows Store-App haben Sie HttpUtility nicht. Stattdessen haben Sie:
Für eine URI, vor dem '?'.
System.Uri.EscapeUriString("example.com/Stack Overflow++?")
- -> "example.com/Stack%20Overflow++?"
Für einen URI-Abfragenamen oder -wert nach dem '?':
System.Uri.EscapeDataString("Stack Overflow++")
- -> "Stack Overflow++"
Für einen x-www-form-urlencoded Abfrage-Namen oder -Wert, in einem POST-Inhalt:
System.Net.WebUtility.UrlEncode("Stack Overflow++")
- -> "Stack+Overflow%2B%2B"
Antwort #6
Versuchen Sie Server.UrlEncode() oder System.Web.HttpUtility.UrlEncode() für Fälle, in denen Sie keinen Zugriff auf das Server-Objekt haben. Sie können auch System.Uri.EscapeUriString() verwenden, um zu vermeiden, dass Sie eine Referenz auf die System.Web-Assembly hinzufügen.
