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

War es hilfreich?

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"
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top