【问题标题】:Using "&" and "+" in Querystring在查询字符串中使用“&”和“+”
【发布时间】:2014-11-12 09:38:14
【问题描述】:

在 Javascript 中调用以下 URL。

var par = "Participant.aspx?ID=" + Id + "&NAME=" + Name+ "&FIRSTNAME=" + Firstname;

有时名称或名字包含“与”或“加”号。

For Example:        Richard & Michael or Richard + Michael

在服务器端,我这样读取查询字符串:

        Dim Name As String = Request.QueryString("NAME")
        Dim Firstname As String = Request.QueryString("FIRSTNAME")

我的问题是,如果查询字符串包含“加”号,则该符号将转换为空格(''),如果查询字符串包含“与”,则“与”之后的所有内容都将被删除。

我已经尝试了几件事。 Request.Form 而不是 Reqeust.Querystring,我也尝试过 Server.URLEncode。但两者都不适合。

使用 URLEncode 的问题是,如果 Querystring 在名称和“加号”之间包含空格,则空格也会转换为“加号”。

你知道如何解决这个问题吗?

【问题讨论】:

  • 使用 URLEncode 的问题是,如果 Querystring 在名称和“加号”之间包含空格,则空格也会转换为“加号”。 - 也就是说应该发生什么。加号表示空格。编码的加号表示加号。听起来你已经解决了这个问题。
  • @AntP:当我问这个问题时,标签是javascriptc#。但是,是的,代码示例 VB.Net。 :-)

标签: javascript asp.net vb.net


【解决方案1】:

您可以将 encodeURIComponent 用于查询字符串值,然后将其设置为查询字符串

    var url = encodeURIComponent($("#<%=hdnPageQuery.ClientID%>").val());
    var title = encodeURIComponent(document.title);
    var redirectUrl = $("#<%=hdnPageTarget.ClientID%>").val();
    var outputUrl = redirectUrl + '?url=' + url + '&title=' + title;
    $('#ancSendToFriendLink').attr('href', outputUrl);

【讨论】:

    【解决方案2】:

    请记住,查询字符串的内容(名称和值)必须正确 URI 编码。如果该行在 JavaScript 中,您可以这样做:

    var par = "Participant.aspx?ID=" + encodeURIComponent(Id) +
                "&NAME=" + encodeURIComponent(Name) +
                "&FIRSTNAME=" + encodeURIComponent(Firstname);
    

    (从技术上讲,名字也应该被编码,但是“ID”、“NAME”和“FIRSTNAME”编码为完全相同的东西,所以我没有在它们上使用encodeURIComponent。)

    请参阅AntP's comment 加号和空格:

    “使用 URLEncode 的问题是,如果 Querystring 在名称和“加号”之间包含空格,这些空格也会转换为“加号”。” - 这就是 应该发生。加号表示空格。编码的加号表示加号。

    【讨论】:

    • 嗯,我认为这是缓存问题。我删除了我的缓存,现在它按预期工作:)。谢谢你
    【解决方案3】:

    您可以使用预定义的 UrlEncodeUrlDecode 方法。这些方法将帮助您在查询字符串中传递特殊字符。看看这些例子。

    UrlDecodeUrlEncode
    希望对您有所帮助。

    【讨论】:

      【解决方案4】:

      嘿,还有另一种方法:

      在将其传递给查询字符串之前,只需替换:

      .Replace("&","%26");

      在另一个页面上,它会自动将 %26 读取为 &,但随后它也不会读取为 &,只需再次替换:

      .Replace("%26","&");

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多