Does C # tem um equivalente para encodeURIComponent do JavaScript ()?
-
01-07-2019 - |
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
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 ??strong> 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"