前两天弄这个字符串在Url中传递的过程,还遇到给个问题,当时忘了写下来,今天提出来大家思考下,希望能够帮我解惑。
我把字符串直接UrlEncode()编码,不替代“+”,传递到另一个页面,我跟踪了下,第二个页面接刚接到时字符串是正确的,但是把它UrlDeconde()后,加号就变成空格去了。如下:
1.页面上都是一致的,第一页面的后台代码:
Code
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string Url;
string name;
Url = "Default2.aspx?Name=";
name = "DK51+700中继站";
HyperLink1.NavigateUrl = Url + Server.UrlEncode(name);
}
}
2.第二页面的后台代码:
Code
public partial class Default2 : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
string name = Request.QueryString["Name"];
//未解码时
Label1.Text =” 未解码时:” + name;
name = Server.UrlDecode(name);
//解码后
Label2.Text =”解码后:” + name;
}
}
结果是:“未解码时:DK51+700中继站”。“解码后:DK51 700中继站”。
这个问题也很让我疑惑,似乎这个是最简单的办法啊,我只要将字符串UrlEncode()后直接传递就行了,不用替代“+”,接收到后直接使用,不要解码,是不是这样也是正确的呢?还是只是一时的正确。UrlEncode()编码和解码的真正原理是什么呢?希望有人能给出解答,我查了msdn,但是没有详细的讲解,希望有大侠给出资料。谢谢。
后注:我查到原因,在Request.QueryString[]中,就内含了UrlDecode()函数,已经解码了。