it-swarm-eu.dev

Entspricht C # der encodeURIComponent () von JavaScript?

In JavaScript:

encodeURIComponent("©√") == "%C2%A9%E2%88%9A"

Gibt es eine Entsprechung für C # -Anwendungen? Für das Ausblenden von HTML-Zeichen habe ich verwendet:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"&#" + ((int)m.Value[0]).ToString() + ";");

Ich bin mir jedoch nicht sicher, wie ich die Übereinstimmung in das richtige Hexadezimalformat konvertieren soll, 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 "©√" Anstelle von "%C2%A9%E2%88%9A" Zurück. Es sieht so aus, als müsste ich den String in Bytes oder so etwas aufteilen.

Bearbeiten: Dies ist für eine Windows-App. Die einzigen Elemente, die in System.Web Verfügbar sind, sind: AspNetHostingPermission, AspNetHostingPermissionAttribute und AspNetHostingPermissionLevel.

122
travis

Uri.EscapeDataString Oder HttpUtility.UrlEncode Ist der richtige Weg, um einen String zu maskieren, der Teil einer URL sein soll.

Nehmen Sie zum Beispiel den String "Stack Overflow":

  • HttpUtility.UrlEncode("Stack Overflow") -> "Stack+Overflow"

  • Uri.EscapeUriString("Stack Overflow") -> "Stack%20Overflow"

  • Uri.EscapeDataString("Stack + Overflow") -> Kodiert auch "+" to "%2b" ----> Stack%20%2B%20%20Overflow

Nur der letzte ist korrekt, wenn er als tatsächlicher Teil der URL verwendet wird (im Gegensatz zum Wert eines der Abfragezeichenfolgenparameter).

195
Steve

HttpUtility.HtmlEncode/Decodieren
HttpUtility.UrlEncode/Decodieren

Sie können einen Verweis auf die System.Web Assembly, wenn es in Ihrem Projekt nicht verfügbar ist

19
David Thibault

Ich habe versucht, ein voll 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 = "[email protected]#$%^&*()_+ 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% 8

Nachdem Sie es mit Javascript decodeURLComponent () dekodiert haben;

sie erhalten folgendes: ! @ # $% ^ & * () _ + Text hier али мамедов баку

Vielen Dank für die Aufmerksamkeit

16
Ali Mamedov

System.Uri.EscapeUriString () schien nichts zu tun, aber System.Uri.Escape Data String () funktionierte für mich.

11
Echilon

Versuchen Sie es mit Server.UrlEncode() oder System.Web.HttpUtility.UrlEncode(), wenn Sie keinen Zugriff auf das Objekt Server haben. Sie können auch System.Uri.EscapeUriString() verwenden, um zu vermeiden, dass ein Verweis auf System.Web Montage.

9
Billy Jo

Für eine Windows Store-App ist HttpUtility nicht verfügbar. Stattdessen haben Sie:

Für einen 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 ++")
    • -> "Stapel% 20Überlauf% 2B% 2B"

Für eine x-www-form-urlencoded Abfrage Name oder Wert, in einem POST Inhalt:

  • System.Net. WebUtility.UrlEncode ("Stack Overflow ++")
    • -> "Stapel + Überlauf% 2B% 2B"
6
Cœur

Sie können das Server-Objekt im System.Web-Namespace verwenden

Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode und Server.HtmlDecode.

Edit: Poster fügte hinzu, dass dies eine Windows-Anwendung und keine Web-Anwendung war, wie man glauben würde. Die oben aufgeführten Elemente sind in der HttpUtility-Klasse in System.Web verfügbar, die als Referenz zum Projekt hinzugefügt werden muss.

6
Mitchel Sellers