¿Cómo reemplazo todos los espacios con% 20 en C #?

Quiero hacer una cadena en una URL usando C #. Debe haber algo en el framework .NET que debería ayudar, ¿no?

Creo que estás buscando HttpServerUtility.UrlEncode .

 System.Web.HttpUtility.UrlEncode(string url) 

Otra forma de hacerlo es usar Uri.EscapeUriString(stringToEscape) .

Encontré útil System.Web.HttpUtility.UrlPathEncode(string str);

Reemplaza espacios con% 20 y no con +.

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

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

Código de muestra:

 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" 

Use HttpServerUtility.UrlEncode

HttpUtility.UrlEncode Method (String)

Necesitaba hacer esto también, encontré esta pregunta de hace años pero el título y el texto de la pregunta no coinciden del todo, y usar Uri.EscapeDataString o UrlEncode (¡no lo use, por favor!) No tiene sentido a menos que nosotros lo hagamos. están hablando de pasar URL como parámetros a otras URL.

(Por ejemplo, pasar una URL de callback al hacer una autenticación de ID abierta, Azure AD, etc.)

Esperando que esta sea una respuesta más pragmática a la pregunta: quiero hacer una cadena en una URL usando C #, debe haber algo en el framework .NET que pueda ayudar, ¿no?

, dos funciones son útiles para crear cadenas de URL en C #

  • String.Format para formatear la URL
  • Uri.EscapeDataString para escapar de cualquier 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 y pegar de forma segura en la barra de direcciones de un navegador, o el atributo src de una etiqueta HTML A , o usarse con curl , o codificarse en un código QR, etc.

El código a continuación reemplazará la repetición de espacio con un solo carácter% 20.

Ejemplo:

La entrada es:

 Code by Hitesh Jain 

Salida:

 Code%20by%20Hitesh%20Jain 

Código

 static void Main(string[] args) { Console.WriteLine("Enter a string"); string str = Console.ReadLine(); string replacedStr = null; // This loop will repalce all repeat black space in single space for (int i = 0; i < str.Length - 1; i++) { if (!(Convert.ToString(str[i]) == " " && Convert.ToString(str[i + 1]) == " ")) { replacedStr = replacedStr + str[i]; } } replacedStr = replacedStr + str[str.Length-1]; // Append last character replacedStr = replacedStr.Replace(" ", "%20"); Console.WriteLine(replacedStr); Console.ReadLine(); } 

HttpServerUtility.HtmlEncode

De la documentación:

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

Pero esto en realidad codifica HTML, no URL. En su lugar, use UrlEncode (TestString) .