ti-enxame.com

C # tem um equivalente ao encodeURIComponent () do JavaScript?

Em JavaScript:

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

Existe um equivalente para aplicativos C #? Para escapar caracteres HTML, usei:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"&#" + ((int)m.Value[0]).ToString() + ";");

Mas não sei como converter a correspondência no formato hexadecimal correto que o JS usa. Por exemplo, este código:

txtOut.Text = Regex.Replace(txtIn.Text, @"[\u0080-\uFFFF]",
    m => @"%" + String.Format("{0:x}", ((int)m.Value[0])));

Retorna "%a9%221a" para "©√" em vez de "%C2%A9%E2%88%9A". Parece que eu preciso dividir a string em bytes ou algo assim.

Editar: trata-se de um aplicativo do Windows, os únicos itens disponíveis em System.Web são: AspNetHostingPermission, AspNetHostingPermissionAttribute e AspNetHostingPermissionLevel.

118
travis

Uri.EscapeDataString ou HttpUtility.UrlEncode é a maneira correta de escapar de uma string que deve fazer parte de um URL.

Tomemos, por exemplo, a string "Stack Overflow":

  • HttpUtility.UrlEncode("Stack Overflow") -> "Stack+Overflow"

  • Uri.EscapeUriString("Stack Overflow") -> "Stack%20Overflow"

  • Uri.EscapeDataString("Stack + Overflow") -> Também codifica "+" to "%2b" ----> Stack%20%2B%20%20Overflow

Somente o último está correto quando usado como uma parte real do URL (em oposição ao valor de um dos parâmetros da cadeia de caracteres de consulta)

191
Steve

HttpUtility.HtmlEncode/Decode
HttpUtility.UrlEncode/Decode

Você pode adicionar uma referência à montagem System.Web se ela não estiver disponível no seu projeto

19
David Thibault

Eu tentei fazer analógico compatível completo do encodeURIComponent do javascript para c # e após minhas experiências de 4 horas, encontrei este

c # CÓDIGO:

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

o resultado é: !% 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% seja% d0% b2% 20% d0% b1% d0% b0% d0% ba% d1% 8

Depois de decodificá-lo com decodeURLComponent () do Javascript;

você obterá o seguinte: ! @ # $% ^ & * () _ + algum texto aqui али мамедов баку

Obrigado pela atenção

16
Ali Mamedov

System.Uri.EscapeUriString () não pareceu fazer nada, mas System.Uri.Escape Data String () funcionou para mim.

11
Echilon

Tente Server.UrlEncode() ou System.Web.HttpUtility.UrlEncode() para instâncias em que você não tem acesso ao objeto Server. Você também pode usar System.Uri.EscapeUriString() para evitar adicionar uma referência ao assembly System.Web.

9
Billy Jo

Para um aplicativo da Windows Store, você não terá o HttpUtility. Em vez disso, você tem:

Para um URI, antes do '?':

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

Para um nome ou valor de consulta URI, após o '?':

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

Para um x-www-form-urlencoded nome ou valor da consulta, em um conteúdo POST:

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

Você pode usar o objeto Server no espaço para nome System.Web

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

Edit: poster acrescentou que este era um aplicativo do Windows e não um da web como se poderia acreditar. Os itens listados acima estariam disponíveis na classe HttpUtility dentro do System.Web, que deve ser adicionada como uma referência ao projeto.

6
Mitchel Sellers