2009-02-10 24 views
15

Esta es, probablemente, muy simple, pero simplemente no puede encontrar la respuesta a mí mismo :(¿Cómo reemplazo los caracteres especiales en una URL?

Básicamente, lo que quiero decir, dada esta cadena:

"http://www.google.com/search?hl=en&q=c# objetos"

Quiero esta salida:

http://www.google.com/search?hl=en&q=c%23+objects

estoy seguro de que hay alguna clase de ayuda en alguna parte enterrada en el marco que se encarga de eso para mí, pero estoy ja Es difícil encontrarlo.

EDITAR: Debo agregar que esto es para una aplicación de Winforms.

+0

Algo parece fuera de aquí. ¿Dónde obtiene una URL sin que se escapen los valores de su consulta? Si está construyendo la URL usted mismo, debería estar escapando los valores de la consulta ("en" y "objetos C#"), ** luego ** concatenándolos en la URL. – DLJessup

Respuesta

13

HttpServerUtility.UrlEncode(string)

En caso de resolver cualquier caracteres problemáticos

Para usarlo, tendrá que añadir una referencia a System.Web (Proyecto Explorer> Referencias> Agregar referencia> Sistema.Web)

Una vez que haya hecho eso, puede utilizarlo para codificar los elementos que desee agregar a la cadena de consulta:

System.Web.HttpUtility.UrlEncode("c# objects"); 
+0

Dang 58 segundos demasiado lento, es hora de romper Mavis Beacon! ;-) –

+0

Hmm no sabía nada de esto. :) – Dacto

+0

Gracias Wilfred ... No me refiero a esto :) – Shoban

9

@Wilfred Knievel tiene la respuesta aceptada, pero también se puede utilizar Uri.EscapeUriString() si se quería evitar la dependencia de la System.Web espacio de nombres.

+0

es la mejor solución si solo está usando el cliente .net. – dmihailescu

+0

Esta opción es ideal solo para codificar caracteres especiales como acentos y no todo, como barras o dos puntos. – Andrew

10

Si no desea una dependencia de System.Web, aquí hay una implementación de "UrlEncode" que tengo en mi Biblioteca C# OAuth (que requiere una implementación correcta, es decir, los espacios deben codificarse usando la codificación porcentual en lugar del "+ "para espacios etc.)

private readonly static string reservedCharacters = "!*'();:@&=+$,/?%#[]"; 

public static string UrlEncode(string value) 
{ 
    if (String.IsNullOrEmpty(value)) 
     return String.Empty; 

    var sb = new StringBuilder(); 

    foreach (char @char in value) 
    { 
     if (reservedCharacters.IndexOf(@char) == -1) 
      sb.Append(@char); 
     else 
      sb.AppendFormat("%{0:X2}", (int)@char); 
    } 
    return sb.ToString(); 
} 

Como referencia http://en.wikipedia.org/wiki/Percent-encoding

+0

¡Bien! A diferencia de los métodos en System.Web, esto también codifica caracteres especiales. (Tuve que agregar '-' a la lista de caracteres reservados) – Grastveit

+0

¿Qué pasa con los espacios? No estaban codificados en% 20 como deberían. – pstarkov

Cuestiones relacionadas