C#中URL编码
C#中编码主要方法
HttpUtility.UrlEncode
、Server.UrlEncode
、Uri.EscapeUriString
、Uri.EscapeDataString
Server.UrlEncode && HttpUtility.UrlEncode 这两个方法在绝大多数情况下是一样的。它们的区别是HttpUtility.UrlEncode默认使用UTF8格式编码,而Server.UrlEncode是使用系统预设格式编码,Server.UrlEncode使用系統预设编码做为参数调用HttpUtility.UrlEncode编码,所以如果系统全局都用UTF8格式编码,这两个方法就是一样的。
HttpUtility.UrlEncode对冒号(:)和斜杠(/)进行了编码
所以不能用来对网址进行编码。也不能对参数进行编码,因为在参数中空格应该被编码为%20而不是被HttpUtility.UrlEncode编码为加号(+),所以不推荐用这两个方法对URI进行编码。
两者对应解码方法:Server.UrlDecode 、HttpUtility. UrlDecode
Uri.EscapeUriString 用于对网址编码(不包含参数)
Uri.EscapeUriString对空格进行了编码,也对中文进行了编码,但对冒号(:)、斜杠(/)和井号(#)未编码,所以此方法可以用于网址进行编码,但不能对参数进行编码,作用类似JavaScript中的encodeURI方法。
Uri.EscapeDataString 用于对网址参数进行编码
Uri.EscapeDataString对冒号(:)、斜杠(/)、空格、中文、井号(#)都进行了编码,所以此方法不可以用于网址进行编码,但可以用于对参数进行编码,作用类似JavaScript中的encodeURIComponent方法。
在C#中推荐的做法是用Uri.EscapeUriString
对URI的网址部分编码,用Uri.EscapeDataString
对URI中传递的参数进行编码。
在网址作为参数进行传递时,C#中用HttpUtility.UrlEncode方法进行编码,JavaScript中用unescape()方法解码是有效的。如:传递的URL参数是http://localhost:54904/user/ShopCart.aspx
'/login/login.aspx?ReturnUrl="+ System.Web.HttpUtility.UrlEncode(“http://localhost:54904/user/ShopCart.aspx”) + "'
编码后的结果:/login/login.aspx?ReturnUrl=http%3a%2f%2flocalhost%3a54904%2fuser%2fShopCart.aspx