我有一个看起来像这样的查询字符串。 Page.aspx?s=C94CA8CCAFB12E2B669735186D327D1B3E505538139A66C8455X%2353411389BBB9577E1FD
然后我有一个回帖看起来像这样的按钮:
protected void btn_Click(object sender, EventArgs e)
{
string URL = Request.QueryString["s"];
Response.Redirect("Page2.aspx?s="+URL);
}
但是当我到达第2页时,我在URL中放入的查询字符串将%符号更改为#并且解密失败,因为它在字符串中查找%来分隔我的所有页面与该解密一起工作所以我无法改变方式有效的我需要知道为什么它会将%改为#这就是它进入Page2.aspx时的样子
Page2.aspx?s=C94CA8CCAFB12E2B669735186D327D1B3E505538139A66C8455X#53411389BBB9577E1FD
%23
是#
字符的url编码代码。如果你看,它实际上用%23
替换#
而不仅仅是%
。在页面之间传递查询字符串信息时,您需要检查它。
protected void btn_Click(object sender, EventArgs e)
{
string URL = Request.QueryString["s"];
Response.Redirect("Page2.aspx?s="+UrlEncode(URL));
}
如果你仔细检查你的查询字符串,你会发现不是%
被#
取代,而是%23
。那是因为%
是逃脱角色而%23
代表#
。你必须用%
逃脱%25
本身:
Page.aspx?s=C94CA8CCAFB12E2B669735186D327D1B3E505538139A66C8455X%252353411389BBB9577E1FD
string URL = Request.QueryString["s"];
URL = Server.UrlEncode(URL); // This will allow it to keep the %23
Response.Redirect("Page2.aspx?s="+URL);
正如所有的答案你得到的那就是编码的原因只是确保你告诉它它是一个UrlEncode所以它不会改变它。
它被翻译为URL Encoded character。请注意,它不仅仅是被替换的百分号,而且还有跟随它的23
。如果你查看维基百科页面上列出的表格,你会看到%23
是#
字符。