尝试使用时查询字符串会发生变化。

Query string changes when try to use it.

我有一个如下所示的查询字符串。 Page.aspx?s=C94CA8CCAFB12E2B669735186D327D1B3E505538139A66C8455X%2353411389BBB9577E1FD 然后我有一个带有 post 背面的按钮,如下所示:

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));
}

它被翻译成 URL Encoded character。请注意,被替换的不仅是百分号,还有它后面的 23。如果您查看维基百科页面上列出的 table,您会发现 %23# 字符。

如果仔细检查查询字符串,您会发现 % 不是 #,而是 %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,这样它就不会改变它。