2009-10-04 43 views
53

Quiero hacer una cadena en una URL usando C#, debe haber algo en el marco de .NET que pueda ayudar, ¿verdad ?.Cómo reemplazo todos los espacios con% 20 en C#

+0

Este título de la pregunta no coincide con la pregunta. Para reemplazar todos los espacios con% 20 (el título) en C#, podría usar 'String.Replace (" ","% 20 ")'. Si está construyendo una URL, todo lo que necesita hacer es poner un valor de URL en una cadena: 'string url =" https: // site/app /? Q = cats "' Pero si OP hablaba de pasar una URL como una El parámetro GET forma parte de otra URL que es completamente diferente, que a su vez es diferente de, por ejemplo, emitir una URL en una etiqueta de anclaje HTML en ASP.NET (o lo que sea). – nothingisnecessary

Respuesta

51

Creo que estás buscando HttpServerUtility.UrlEncode.

System.Web.HttpUtility.UrlEncode(string url) 
+2

Creo que [Uri.EscapeUriString()] (https://msdn.microsoft.com/en-us/library/system.uri.escapeuristring%28v=vs.110%29.aspx) es el método apropiado si tenemos ser religioso al respecto :) –

+10

@StoyanDimov: 'EscapeUriString()' no escapa a '&' ni '=' ni '?', por lo que 'EscapeDataString()' parece ser el que se va a usar. –

+3

Alguien había editado esta pregunta para cambiar por completo la respuesta. Nosotros [no deberíamos usar la edición para cambiar el significado] (http://stackoverflow.com/help/editing) de una publicación en particular. – palswim

-2

HttpServerUtility.HtmlEncode

A partir de los documentos:

String TestString = "This is a <Test String>."; 
String EncodedString = Server.HtmlEncode(TestString); 

Actualización: En realidad, esto no URLs codifica en HTML. Use UrlEncode (TestString) como dicen todos los que pueden leer mejor que yo. No eliminar esto en caso de que alguien encuentre este hilo mientras busca la codificación html.

+3

El OP pregunta por la codificación de URL; no codificación de HTML –

+0

No, esto es para codificación HTML, no codificación URL (como su nombre lo indica ...) –

+0

Sí, tiene razón, use UrlEncode() para las URL de codificación; esto es para codificar Entidades Html solo –

89

Otra forma de hacer esto es usar Uri.EscapeUriString(stringToEscape).

+4

Desafortunadamente, este método no 'escapa '' '' caracteres. –

+15

Tampoco escapa '=', ni '?'. Parece que 'Uri.EscapeDataString()' es el camino a seguir. –

40

I encontraron útiles System.Web.HttpUtility.UrlPathEncode(string str);

Reemplaza espacios con% 20 y no con +.

+0

Parece que no hay un método UrlPathDecode? – syclee

+0

Hay, al menos en 4.0. System.Web.HttpUtility.UrlDecode ("a% 20b") produce "a b" – Abacus

+2

Funciona, pero no lo use, ya que es para navegadores. Use Uri.EscapeUriString (STRING) en su lugar. MSDN: "No utilizar; destinado solo para la compatibilidad del navegador. Use UrlEncode". http://msdn.microsoft.com/en-us/library/system.web.httpserverutility.urlpathencode.aspx – VRC

15

Para escaparse correctamente de los espacios, así como del resto de los caracteres especiales, use System.Uri.EscapeDataString(string stringToEscape).

+1

Si un [comentario es una respuesta real] (http://stackoverflow.com/questions/1517586/how-do-i-replace-all-the-spaces-with-20-in-c-sharp/36462468#comment_1517592), alguien necesita hacer de eso una respuesta para la pregunta. – palswim

+0

sí, este maneja espacio, # y%, pero codifica/a% 2f – kite

0

que tenía que hacer esto también, encontraron esta cuestión desde hace años, pero título de la pregunta y el texto no se ajusta exactamente con preparar y utilizar Uri.EscapeDataString o UrlEncode (no utilizar que un favor!) Por lo general no tiene sentido a menos que estemos hablando de pasar URL como parámetros a otras URL.

(Por ejemplo, pasar una URL de devolución de llamada cuando se realiza la autenticación abierta ID, Azure AD, etc.)

esperando que esto es la respuesta más pragmático a la pregunta: Quiero hacer una cadena en un URL usando C# , debe haber algo en el framework .NET que debería ayudar, ¿no?

- dos funciones son útiles para la fabricación de cadenas URL en C#

  • String.Format para dar formato a la URL
  • Uri.EscapeDataString para escapar ningún parámetro en la URL

Este código

String.Format("https://site/app/?q={0}&redirectUrl={1}", 
    Uri.EscapeDataString("search for cats"), 
    Uri.EscapeDataString("https://mysite/myapp/?state=from idp")) 

produce este resultado

https://site/app/?q=search%20for%20cats&redirectUrl=https%3A%2F%2Fmysite%2Fmyapp

que se puede copiar de forma segura y pegar en la barra de direcciones del navegador, o el atributo src de una etiqueta HTML A, o utilizar con curl, o codificada en un código QR, etc.

+0

Y el equivalente de JavaScript sería algo como '" https: // sitio/app /? Q = "+ encodeURIComponent (" búsqueda de gatos ") + "& redirectUrl =" + encodeURIComponent ("https: // mysite/myapp /? state = from idp") 'que produce el mismo resultado. – nothingisnecessary

2

Como se comentó en la historia aprobada, el método HttpServerUtility.UrlEncode reemplaza los espacios con + en lugar de% 20. Use uno de estos dos métodos en su lugar: Uri.EscapeUriString() o Uri.EscapeDataString()

Código de ejemplo:

HttpUtility.UrlEncode("https://mywebsite.com/api/get me this file.jpg") 
//"https%3a%2f%2fmywebsite.com%2fapi%2fget+me+this+file.jpg" 

Uri.EscapeUriString("https://mywebsite.com/api/get me this file.jpg"); 
//"https://mywebsite.com/api/get%20me%20this%20file.jpg" 
Uri.EscapeDataString("https://mywebsite.com/api/get me this file.jpg"); 
//"https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%20me%20this%20file.jpg" 

//When your url has a query string: 
Uri.EscapeUriString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg"); 
//"https://mywebsite.com/api/get?id=123&name=get%20me%20this%20file.jpg" 
Uri.EscapeDataString("https://mywebsite.com/api/get?id=123&name=get me this file.jpg"); 

//"https%3A%2F%2Fmywebsite.com%2Fapi%2Fget%3Fid%3D123%26name%3Dget%20me%20this%20file.jpg" 
Cuestiones relacionadas