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
.
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).
HttpUtility.HtmlEncode
/DecodierenHttpUtility.UrlEncode
/Decodieren
Sie können einen Verweis auf die System.Web
Assembly, wenn es in Ihrem Projekt nicht verfügbar ist
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
System.Uri.EscapeUriString () schien nichts zu tun, aber System.Uri.Escape Data String () funktionierte für mich.
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.
Für eine Windows Store-App ist HttpUtility nicht verfügbar. Stattdessen haben Sie:
Für einen URI vor dem '?':
Für einen URI-Abfragenamen oder -wert nach dem '?':
Für eine x-www-form-urlencoded Abfrage Name oder Wert, in einem POST Inhalt:
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.