it-swarm.it

C # ha un equivalente a encodeURIComponent () di JavaScript?

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.

122
travis

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)

195
Steve

HttpUtility.HtmlEncode/Decodifica
HttpUtility.UrlEncode/Decodifica

Puoi aggiungere un riferimento a System.Web Assemblaggio se non è disponibile nel tuo progetto

19
David Thibault

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

16
Ali Mamedov

System.Uri.EscapeUriString () non sembrava fare nulla, ma System.Uri.Escape Data String () ha funzionato per me.

11
Echilon

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.

9
Billy Jo

Per un'app di Windows Store, non avrai HttpUtility. Invece, hai:

Per un URI, prima del '?':

  • Sistema. Uri.EscapeUriString ("example.com/Stack Overflow ++?")
    • -> "esempio.com/Stack%20Overflow++?"

Per un nome o valore di una query URI, dopo '?':

  • Sistema. Uri.EscapeDataString ("Stack Overflow ++")
    • -> "Stack% 20 Overflow% 2B% 2B"

Per un x-www-form-urlencoded nome o valore della query, in a POST contenuto:

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

È 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.

6
Mitchel Sellers