Pregunta

En JavaScript:

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

¿Existe un equivalente para las aplicaciones C#?Para escapar de caracteres HTML utilicé:

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

Pero no estoy seguro de cómo convertir la coincidencia al formato hexadecimal correcto que utiliza JS.Por ejemplo este código:

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

Devoluciones "%a9%221a" para "©√" en lugar de "%C2%A9%E2%88%9A".Parece que necesito dividir la cadena en bytes o algo así.

Editar:Esto es para una aplicación de Windows, los únicos elementos disponibles en System.Web son: AspNetHostingPermission, AspNetHostingPermissionAttribute, y AspNetHostingPermissionLevel.

¿Fue útil?

Solución

Uri.EscapeDataString o HttpUtility.UrlEncode es la forma correcta de escapar de una cadena destinada a ser parte de una URL.

Tomemos por ejemplo la cadena "Stack Overflow":

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

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

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

Sólo el último es correcto cuando se utiliza como parte real de la URL (a diferencia del valor de uno de los parámetros de la cadena de consulta).

Otros consejos

HttpUtility.HtmlEncode / Decodificar
HttpUtility.UrlEncode / Decodificar

Puedes agregar una referencia a la System.Web ensamblaje si no está disponible en su proyecto

Intenté hacer un análogo totalmente compatible del encodeURIComponent de JavaScript para C# y después de mis experimentos de 4 horas encontré esto

C# CÓDIGO:

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

el resultado es:!%40%23%24%25%5e%26*()_%2b%20some%20text%20aquí%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

Después de decodificarlo con decodeURLComponent() de Javascript;

obtendrás esto:!@#$%^&*()_+ algo de texto aquí али мамедов баку

Gracias por su atención

System.Uri.EscapeUriString() no pareció hacer nada, pero System.Uri.EscapeDatosString() funcionó para mí.

Intentar Server.UrlEncode(), o System.Web.HttpUtility.UrlEncode() para los casos en los que no tienes acceso a la Server objeto.También puedes usar System.Uri.EscapeUriString() para evitar agregar una referencia a la System.Web asamblea.

Puede utilizar el objeto Servidor en el espacio de nombres System.Web

Servidor.UrlEncode, Servidor.UrlDecode, Servidor.HtmlEncode y Servidor.HtmlDecode.

Editar:El cartel agregó que se trataba de una aplicación de Windows y no de una web como uno podría creer.Los elementos enumerados anteriormente estarían disponibles en la clase HttpUtility dentro de System.Web, que debe agregarse como referencia al proyecto.

Para una aplicación de la Tienda Windows, no tendrá HttpUtility.En cambio, tienes:

Para un URI, antes de '?':

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

Para un nombre o valor de consulta URI, después de '?':

  • Sistema.Uri.EscapeDataString("Desbordamiento de pila++")
    • -> "Pila%20Desbordamiento%2B%2B"

Para x-www-formulario-urlencoded nombre o valor de la consulta, en un contenido POST:

  • Sistema.Net.WebUtility.UrlEncode("Desbordamiento de pila++")
    • -> "Pila+Desbordamiento%2B%2B"
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top