Pergunta

Em JavaScript:

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

Existe um equivalente para aplicações C #? Para escapar caracteres HTML que eu usei:

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

Mas eu não tenho certeza de como converter o jogo para o formato hexadecimal correto que usa JS. Por exemplo este código:

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

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

Edit: Isto é para um aplicativo do Windows, os únicos itens disponíveis em System.Web são:. AspNetHostingPermission, AspNetHostingPermissionAttribute e AspNetHostingPermissionLevel

Foi útil?

Solução

Uri.EscapeDataString ou HttpUtility.UrlEncode é a maneira correta para escapar de uma corda destinado a ser parte de uma URL.

Tomemos por exemplo o "Stack Overflow" string:

  • 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

Apenas o último está correto quando usado como uma parte real do URL (por oposição ao valor de um dos parâmetros de string de consulta)

Outras dicas

HttpUtility.HtmlEncode / Decode
HttpUtility.UrlEncode / Decode

Você pode adicionar uma referência para o System.Web montagem, se ele não está disponível em seu projeto

Eu tentei fazer analógico compatível cheio de encodeURIComponent de javascript para c # e depois meus 4 experimentos hora eu achei este

c # código:

string a = "!@#$%^&*()_+ 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% ser% D0% B2% 20% D0% B1% D0% B0% D0% BA% d1% 83

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

Você receberá esta: ! @ # $% ^ & * () _ + Algum texto aqui ??? ??????? ????

Obrigado pela atenção

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

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

Você pode usar o objeto Server no namespace System.Web

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

Editar: Poster acrescentou que esta era uma aplicação de janelas e não um web um como seria de acreditar. Os itens listados acima deve estar disponível a partir da classe HttpUtility dentro System.Web que deve ser adicionado como uma referência para o projeto.

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

Para uma URI, antes do '?':

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

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

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

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

  • System.Net. WebUtility.UrlEncode ( "Stack Overflow ++")
    • -> "Stack Overflow +% 2B% 2B"
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top