【问题标题】:Query string changes when try to use it.尝试使用时查询字符串更改。
【发布时间】:2017-12-20 19:33:35
【问题描述】:

我有一个看起来像这样的查询字符串。 Page.aspx?s=C94CA8CCAFB12E2B669735186D327D1B3E505538139A66C8455X%2353411389BBB9577E1FD 然后我有一个 Button,它的回帖如下所示:

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

【问题讨论】:

    标签: c# asp.net query-string


    【解决方案1】:

    %23# 字符的 url 编码代码。如果你看,它实际上是用# 替换%23 而不仅仅是%。在页面之间传递查询字符串信息时,您需要检查这一点。

    protected void btn_Click(object sender, EventArgs e)
    {
        string URL = Request.QueryString["s"];
        Response.Redirect("Page2.aspx?s="+UrlEncode(URL));
    }
    

    【讨论】:

      【解决方案2】:

      如果你仔细检查你的查询字符串,你会发现不是%#代替,而是%23。这是因为% 是转义字符,%23 代表#。你必须用%25 来逃避% 本身:

      Page.aspx?s=C94CA8CCAFB12E2B669735186D327D1B3E505538139A66C8455X%252353411389BBB9577E1FD

      【讨论】:

        【解决方案3】:
        string URL = Request.QueryString["s"];
                URL = Server.UrlEncode(URL); // This will allow it to keep the %23 
                Response.Redirect("Page2.aspx?s="+URL);
        

        你得到的所有答案都是肯定的,这就是编码的原因只要确保你告诉它它是一个 UrlEncode,这样它就不会改变它。

        【讨论】:

          【解决方案4】:

          它被翻译为URL Encoded character。请注意,不仅要替换百分号,还可以替换后面的23。如果您查看 Wikipedia 页面上列出的表格,您会发现 %23# 字符。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-05-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多