In JavaScript:
encodeURIComponent("©√") == "%C2%A9%E2%88%9A"
Esiste un equivalente per le applicazioni C #? Per sfuggire ai caratteri HTML ho usato:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"&#" + ((int)m.Value[0]).ToString() + ";");
Ma non sono sicuro di come convertire la corrispondenza nel formato esadecimale corretto utilizzato da JS. Ad esempio questo codice:
txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));
Ritorna "%a9%221a"
per "©√"
invece di "%C2%A9%E2%88%9A"
. Sembra che abbia bisogno di dividere la stringa in byte o qualcosa del genere.
Modifica: questo è per un'app di Windows, gli unici elementi disponibili in System.Web
sono: AspNetHostingPermission
, AspNetHostingPermissionAttribute
e AspNetHostingPermissionLevel
.
Uri.EscapeDataString
O HttpUtility.UrlEncode
È il modo corretto di sfuggire a una stringa destinata a far parte di un URL.
Prendi ad esempio la stringa "Stack Overflow"
:
HttpUtility.UrlEncode("Stack Overflow")
-> "Stack+Overflow"
Uri.EscapeUriString("Stack Overflow")
-> "Stack%20Overflow"
Uri.EscapeDataString("Stack + Overflow")
-> codifica anche "+" to "%2b"
----> Stack%20%2B%20%20Overflow
Solo l'ultimo è corretto se utilizzato come parte effettiva dell'URL (al contrario del valore di uno dei parametri della stringa di query)
HttpUtility.HtmlEncode
/DecodificaHttpUtility.UrlEncode
/Decodifica
Puoi aggiungere un riferimento a System.Web
Assemblaggio se non è disponibile nel tuo progetto
Ho provato a fare un analogo pienamente compatibile del componente encodeURIC di javascript per c # e dopo i miei esperimenti di 4 ore ho trovato questo
cODICE c #:
string a = "[email protected]#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");
il risultato è: !% 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% essere% D0% b2% 20% D0% b1% D0% b0% D0% ba% d1% 8
Dopo averlo decodificato con decodeURLComponent () di Javascript;
otterrai questo: ! @ # $% ^ & * () _ + del testo qui али мамедов баку
Grazie per l'attenzione
System.Uri.EscapeUriString () non sembrava fare nulla, ma System.Uri.Escape Data String () ha funzionato per me.
Prova Server.UrlEncode()
o System.Web.HttpUtility.UrlEncode()
per le istanze quando non hai accesso all'oggetto Server
. Puoi anche usare System.Uri.EscapeUriString()
per evitare di aggiungere un riferimento a System.Web
Assemblaggio.
Per un'app di Windows Store, non avrai HttpUtility. Invece, hai:
Per un URI, prima del '?':
Per un nome o valore di una query URI, dopo '?':
Per un x-www-form-urlencoded nome o valore della query, in a POST contenuto:
È possibile utilizzare l'oggetto Server nello spazio dei nomi System.Web
Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode e Server.HtmlDecode.
Modifica: il poster ha aggiunto che si trattava di un'applicazione Windows e non di una Web come si potrebbe credere. Gli elementi sopra elencati sarebbero disponibili dalla classe HttpUtility all'interno di System.Web che deve essere aggiunto come riferimento al progetto.