En .Net 4.5+ uso WebUtility
Solo por formatear estoy enviando esto como respuesta.
No pude encontrar buenos ejemplos comparándolos así:
string testString = "http://test# space 123/text?var=val&another=two";
Console.WriteLine("UrlEncode: " + System.Web.HttpUtility.UrlEncode(testString));
Console.WriteLine("EscapeUriString: " + Uri.EscapeUriString(testString));
Console.WriteLine("EscapeDataString: " + Uri.EscapeDataString(testString));
Console.WriteLine("EscapeDataReplace: " + Uri.EscapeDataString(testString).Replace("%20", "+"));
Console.WriteLine("HtmlEncode: " + System.Web.HttpUtility.HtmlEncode(testString));
Console.WriteLine("UrlPathEncode: " + System.Web.HttpUtility.UrlPathEncode(testString));
//.Net 4.0+
Console.WriteLine("WebUtility.HtmlEncode: " + WebUtility.HtmlEncode(testString));
//.Net 4.5+
Console.WriteLine("WebUtility.UrlEncode: " + WebUtility.UrlEncode(testString));
Salidas:
UrlEncode: http%3a%2f%2ftest%23+space+123%2ftext%3fvar%3dval%26another%3dtwo
EscapeUriString: http://test#%20space%20123/text?var=val&another=two
EscapeDataString: http%3A%2F%2Ftest%23%20space%20123%2Ftext%3Fvar%3Dval%26another%3Dtwo
EscapeDataReplace: http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo
HtmlEncode: http://test# space 123/text?var=val&another=two
UrlPathEncode: http://test#%20space%20123/text?var=val&another=two
//.Net 4.0+
WebUtility.HtmlEncode: http://test# space 123/text?var=val&another=two
//.Net 4.5+
WebUtility.UrlEncode: http%3A%2F%2Ftest%23+space+123%2Ftext%3Fvar%3Dval%26another%3Dtwo
En .Net 4.5+ uso WebUtility
.UrlEncode
Esto parece replicarse HttpUtility.UrlEncode
(anterior a la v4.0) para los caracteres más comunes:
Uri.EscapeDataString(testString).Replace("%20", "+").Replace("'", "%27").Replace("~", "%7E")
Nota: EscapeUriString
mantendrá una cadena uri válida, lo que hace que use tantos caracteres de texto sin formato como sea posible.
Vea esta respuesta para una tabla que compara las diversas codificaciones:
https://stackoverflow.com/a/11236038/555798
Saltos de línea
Todos los enumerados aquí (que no sean HttpUtility.HtmlEncode
) se convertirán "\n\r"
en %0a%0d
o%0A%0D
Siéntase libre de editar esto y agregar nuevos caracteres a mi cadena de prueba, o dejarlos en los comentarios y lo editaré.