Server.UrlEncode HttpUtility.UrlEncodehtml
把這兩個放到一塊兒說是由於這兩個方法在絕大多數狀況下是同樣的。
它們的區別是HttpUtility.UrlEncode默認使用UTF8格式編碼,
而Server.UrlEncode是使用系統預設格式編碼,
Server.UrlEncode使用系統預設編碼作爲參數調用HttpUtility.UrlEncode編碼,因此若是系統全局都用UTF8格式編碼,這兩個方法就是同樣的。
這兩個方法是怎麼編碼的呢,咱們來看個示例:
複製代碼編碼
string url1 = "http://www.cnblogs.com/a file with spaces.html?a=1&b=博客園#abc"; Response.Write(HttpUtility.UrlEncode(url1) ); //output http://www.cnblogs.com/a+file+with+spaces.html?a=1&b=博客園#abc
由上面的例子咱們能夠看出,HttpUtility.UrlEncode對冒號(:)和斜槓(/)進行了編碼,因此不能用來對網址進行編碼。
那麼能不能對參數進行編碼呢,答案也是否認的。
由於在參數中空格應該被編碼爲 而不是被HttpUtility.UrlEncode編碼爲加號(+),因此不推薦用這兩個方法對URI進行編碼。
Uri.EscapeUriString:用於對網址編碼(不包含參數)
咱們仍是用例子說話:url
string url1 = "http://www.cnblogs.com/a file with spaces.html?a=1&b=博客園#abc"; Response.Write( Uri.EscapeUriString(url1));
//outputs:http://www.cnblogs.com/a file with spaces.html?a=1&b=博客園#abc
能夠看出,Uri.EscapeUriString對空格進行了編碼,也對中文進行了編碼,但對冒號(:)、斜槓(/)和井號(#)未編碼,因此此方法能夠用於網址進行編碼,但不能對參數進行編碼,做用相似JavaScript中的encodeURI方法。
Uri.EscapeDataString:用於對網址參數進行編碼
仍然用例子說話:spa
string url1 = "http://www.cnblogs.com/a file with spaces.html?a=1&b=博客園#abc";
Response.Write(Uri.EscapeDataString(url1));
//outputs:http://www.cnblogs.com/a file with spaces.html?a=1&b=博客園#abc
能夠看出,Uri.EscapeDataString對冒號(:)、斜槓(/)、空格、中文、井號(#)都進行了編碼,因此此方法不能夠用於網址進行編碼,但能夠用於對參數進行編碼,做用相似JavaScript中的encodeURIComponent方法。
在C#中推薦的作法是用Uri.EscapeUriString對URI的網址部分編碼,用Uri.EscapeDataString對URI中傳遞的參數進行編碼。
code