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個方法,總不能給了編碼之道不給破解之密吧
好了,今天就到這了。晚安各位