HttpUtility.UrlEncode講解

向乾發表於2019-05-18

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個方法,總不能給了編碼之道不給破解之密吧

好了,今天就到這了。晚安各位