Domanda

In JavaScript:

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

Esiste un equivalente per le applicazioni C#?Per l'escape dei 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 debba dividere la stringa in byte o qualcosa del genere.

Modificare:Questo è per un'app Windows, gli unici elementi disponibili in System.Web Sono: AspNetHostingPermission, AspNetHostingPermissionAttribute, E AspNetHostingPermissionLevel.

È stato utile?

Soluzione

Uri.EscapeDataString O HttpUtility.UrlEncode è il modo corretto per eseguire l'escape di una stringa destinata a far parte di un URL.

Prendiamo 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 (a differenza del valore di uno dei parametri della stringa di query)

Altri suggerimenti

HttpUtility.HtmlEncode / Decodifica
HttpUtility.UrlEncode / Decodifica

È possibile aggiungere un riferimento a System.Web assembly se non è disponibile nel tuo progetto

Ho provato a fare un analogo completamente compatibile con encodeURIComponent di Javascript per C# e dopo i miei esperimenti di 4 ore ho trovato questo

c#CODICE:

string a = "!@#$%^&*()_+ some text here али мамедов баку";
a = System.Web.HttpUtility.UrlEncode(a);
a = a.Replace("+", "%20");

il risultato è:!%40%23%24%25%5e%26*()_%2b%20some%20testo%20qui%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%83

Dopo averlo decodificato con decodeURLComponent();

otterrai questo:!@#$%^&*()_+ del testo qui али мамедов баку

Grazie per l'attenzione

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

Tentativo Server.UrlEncode(), O System.Web.HttpUtility.UrlEncode() per i casi in cui non hai accesso a Server oggetto.Puoi anche usare System.Uri.EscapeUriString() per evitare di aggiungere un riferimento a System.Web assemblaggio.

È possibile utilizzare l'oggetto Server nello spazio dei nomi System.Web

Server.UrlEncode, Server.UrlDecode, Server.HtmlEncode e Server.HtmlDecode.

Modificare:poster ha aggiunto che si trattava di un'applicazione Windows e non web come si potrebbe credere.Gli elementi sopra elencati sarebbero disponibili dalla classe HttpUtility all'interno di System.Web che deve essere aggiunta come riferimento al progetto.

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

Per un URI, prima di "?":

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

Per il nome o il valore di una query URI, dopo "?":

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

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

  • System.Net.WebUtility.UrlEncode("Stack Overflow++")
    • -> "Stack+Overflow%2B%2B"
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top