舉例:
aaa.aspx?tag=.net%bc%bc%ca%f5 aaa.aspx?tag=.net%e6%8a%80%e6%9c%af
看起來好像是不一樣,其實他們都是對".net技術"進行了UrlEncode,不過一個是GB2312的編碼,一個是Utf-8的編碼。 如下代碼就可以獲得上面的編碼后效果:
加密方法:
string tmp1 = System.Web.HttpUtility.UrlEncode(".net技術", System.Text.Encoding.GetEncoding("GB2312"));
string tmp2 = System.Web.HttpUtility.UrlEncode(".net技術", System.Text.Encoding.UTF8);
我們實際的Web頁面,可能會被其他程序調用。 比如:簡體中文操作系統上的一個ASP頁面,需要向一個ASP.net頁面傳遞一個帶中文的參數。 默認情況下,簡體中文操作系統上, ASP 的 Server.UrlEncode 方法會把中文以GB2312的編碼進行編碼, 但是默認情況下,ASP.net的頁面是采用的UTF-8編碼。 這種情況下,你在用 Request.QueryString["Tag"] 接受值的時候會接受不到中文信息,單步調試看到的是亂碼。 這時候雖然用Request.QueryString["Tag"] 接受的是亂碼,但這時候的Url並不是亂碼。
解決方法就是自己分析Url中的參數,然后對參數的值按照 GB2312的編碼反解密,而不是用.net 默認的Utf-8的編碼反解密。
URL解密的方法:
if (Request.QueryString["url"] != null)
{
string url = Server.UrlDecode(Request.QueryString["url"].ToString());
this.txtAddress.Text = url;
}