Ist C # ein Äquivalent zu JavaScript ist encodeURIComponent ()?
-
01-07-2019 - |
Frage
In JavaScript:
encodeURIComponent("©√") == "%C2%A9%E2%88%9A"
Gibt es ein Äquivalent für C # -Anwendungen? Für HTML-Zeichen zu entkommen ich verwendet:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"&#" + ((int)m.Value[0]).ToString() + ";");
Aber ich bin nicht sicher, wie das Spiel mit dem richtigen Hexadezimal-Format zu konvertieren, das JS verwendet. Zum Beispiel dieses Code:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));
Returns „%a9%221a"
für "©√"
statt "%C2%A9%E2%88%9A"
. Es sieht aus wie ich den String bis in Bytes oder etwas aufteilen müssen.
Edit: Dies ist eine Windows-Anwendung, zur Verfügung die einzigen Elemente in System.Web
sind. AspNetHostingPermission
, AspNetHostingPermissionAttribute
und AspNetHostingPermissionLevel
Lösung
Uri.EscapeDataString
oder HttpUtility.UrlEncode
ist der richtige Weg, um eine Zeichenfolge zu entkommen bedeutete Teil einer URL zu sein.
Nehmen Sie zum Beispiel die Zeichenfolge "Stack Overflow"
:
-
HttpUtility.UrlEncode("Stack Overflow")
->"Stack+Overflow"
-
Uri.EscapeUriString("Stack Overflow")
->"Stack%20Overflow"
-
Uri.EscapeDataString("Stack + Overflow")
-> Auch kodiert"+" to "%2b"
---->Stack%20%2B%20%20Overflow
Nur die letzte ist korrekt, wenn als Ist-Teil der URL verwendet wird (wie auf den Wert eines der Abfrage-String-Parameter gegen)
Andere Tipps
HttpUtility.HtmlEncode
/ Decode
HttpUtility.UrlEncode
/ Decode
Sie können einen Verweis auf die System.Web
Baugruppe hinzufügen, wenn es in Ihrem Projekt nicht verfügbar ist
habe ich versucht, voll kompatibel Analogon von JavaScripts encodeURIComponent für C # und nach meinen 4 Stunden Experimenten zu tun, fand ich diese
C # -Code:
string a = "!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");
ist das Ergebnis: !% 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% beträgt% d0% B2% 20% d0% b1% d0% b0% d0% 83% BA% d1
Nachdem Sie dekodieren mit Javascripts decodeURLComponent ();
Sie erhalten diese: ! @ # $% ^ & * () _ + Some text hier али мамедов баку
Vielen Dank für die Aufmerksamkeit
System.Uri.EscapeUriString () schien nichts zu tun, aber System.Uri.Escape Daten String () funktionierte für mich.
Versuchen 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 zu vermeiden, einen Verweis auf die System.Web
Baugruppe hinzugefügt wird.
Sie können das Server-Objekt im Namespace System.Web verwenden
Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode und Server.HtmlDecode.
Edit: Plakat fügte hinzu, dass dies eine Windows-Anwendung war und kein Netz ein, wie man es glauben. Die aufgeführten Teile würden von der HttpUtility Klasse in System.Web zur Verfügung, die als Referenz zum Projekt hinzugefügt werden muß.
Für einen Windows Store App, werden Sie nicht HttpUtility haben. Stattdessen haben Sie:
Für eine URI, bevor das '?':
- System. Uri.EscapeUriString ( "example.com/Stack Überlauf ++?")
- -> "? Example.com/Stack%20Overflow ++"
Für einen URI-Abfrage Namen oder Wert, nach dem '?':
- System. Uri.EscapeDataString ( "Stack-Überlauf ++")
- -> "Stack% 20Overflow% 2B% 2B"
Für eine x-www-form-urlencoded Abfragenamen oder Wert, in einem POST-Gehalt:
- System.Net. WebUtility.UrlEncode ( "Stack-Überlauf ++")
- -> "Stack + Überlauf% 2B% 2B"