hello 大家好,今天講講HttpUtility.UrlEncode編碼
HttpUtility.UrlEncode方法有4個重載分別如下
我們有這么一個字符串
string str = "http://www.cnblogs.com/a file with spaces.html?a=1&b=博客園#abc";
1.使用HttpUtility.UrlEncode(str)
輸出效果如下:http%3a%2f%2fwww.cnblogs.com%2fa+file+with+spaces.html%3fa%3d1%26b%3d%e5%8d%9a%e5%ae%a2%e5%9b%ad%23abc
大家可以看出編碼后對url及參數都進行了編碼
冒號(:):%3a
斜杠(/):%2f
空格:+
問號(?):%3f
等號(=):%3d
與號(&):%26
井號(#):%23
所以呢,這玩意用起來感覺不太適合對URL進行編碼,如果參數中有空格並沒有轉成 %20,而是轉成了“+”號,對沒有空格的url到是可以用下
2.使用HttpUtility.UrlEncode(str, Encoding.UTF8)
輸出效果如下:http%3a%2f%2fwww.cnblogs.com%2fa+file+with+spaces.html%3fa%3d1%26b%3d%e5%8d%9a%e5%ae%a2%e5%9b%ad%23abc
多了一個參數,可以指定編碼類型而已,看上去和第一個沒區別,我們換一個編碼類型就有區別了,請看下邊
HttpUtility.UrlEncode(str, Encoding.UTF7)
http%3a%2f%2fwww.cnblogs.com%2fa+file+with+spaces.html%3fa%2bAD0-1%2bACY-b%2bAD1TWluiVu0AIw-abc
這下有區別了吧!
3.使用HttpUtility.UrlEncode(byte[] bytes) 將字節數組轉換為編碼的 URL 字符串。
byte[] byteArray = Encoding.UTF8.GetBytes(str);獲取utf8編碼格式的字節數組
encodeStr = HttpUtility.UrlEncode(byteArray);然后對字節數組進行編碼,輸入效果等同於第一個
不信看效果如下:
http%3a%2f%2fwww.cnblogs.com%2fa+file+with+spaces.html%3fa%3d1%26b%3d%e5%8d%9a%e5%ae%a2%e5%9b%ad%23abc
4.使用HttpUtility.UrlEncode(byte[] bytes, int offset, int count);從數組中指定位置開始,按照指定字節數量,將字節數組轉換為 URL 編碼的字符串。
byte[] byteArray = Encoding.UTF8.GetBytes(str);獲取utf8編碼格式的字節數組
encodeStr = HttpUtility.UrlEncode(byteArray,0,5);然后對字節數組進行編碼,從0位置開始去4個
不信看效果如下:http%3a
PS:HttpUtility.UrlEncode既然是編碼,對應的肯定也有解碼,就是HttpUtility.UrlEncode對應的也有以上4個方法,總不能給了編碼之道不給破解之密吧
好了,今天就到這了。晚安各位