【问题标题】:Querystring Issue on C# with special characters带有特殊字符的 C# 上的查询字符串问题
【发布时间】:2010-12-07 18:45:59
【问题描述】:

我遇到了一个非常奇怪的问题,在我的 querystirng 中有“++”作为文本的一部分。但是当我将查询搅拌值分配给字符串时,++ 将变成两个空格。我如何获得作为查询字符串传递的确切内容?

我观察到 querystirng 集合有 "++" 但是当我做 Request.QueryString["search"].ToString() "++" 消失时,我检查了即时窗口。

我使用 C# 2.0

网址:/default.aspx?search=test++

string t = Request.QueryString["search"].ToString();

【问题讨论】:

  • + 通常在 url 编码中被翻译成空格。这就是它们消失的原因。

标签: c# asp.net query-string


【解决方案1】:

你应该使用UrlEncodeUrlDecode

当您将用户输入的数据插入到查询字符串中时,应该使用这些方法。

【讨论】:

  • 您也可以使用那些有用的方法指定编码:)
  • 我的查询字符串也有问题,特别是 # 符号。尝试 UrlEncode 实际上并没有将 # 符号转换为 %23%,尽管它作为特殊字符包含在规范中!在我提交帖子之前,我终于不得不执行额外的替换。我希望对某人有所帮助。
【解决方案2】:

'+' is reserved in query strings

在查询组件中, 人物 ”;”, ”/”, ”?”, ”:”, ”@”, “&”、“=”、“+”、“”和“$”是 保留。

尝试使用UrlEncode 对您的查询字符串进行编码。

【讨论】:

  • 请问,感谢您的更新,我们可以使用 JS escape() 函数处理所有其他字符,但不能处理 +,我必须进行正则表达式替换。
【解决方案3】:

查询字符串中的加号转换为空格。如果您想要一个实际的加号而不是空格,请改用%2B

/default.aspx?search=test%2B%2B

如果您在代码中执行此操作,那么您应该使用UrlEncode 对查询字符串的这一部分进行编码。

【讨论】:

  • 谢谢亚当...我必须在 javascript 上用 %2B 对 + 进行正则表达式替换,然后调用 javascript escape(),在 C# 上,我必须用正则表达式替换 %2b 和然后做一个 Server.urlEncode()... 所有其他字符都可以轻松处理,但不是 +
【解决方案4】:

我不知道有没有办法将确切的文本传递到查询中。 HTTP标准基本上说+相当于一个空格字符,所以如果你想保留+,你应该对查询字符串进行编码,正如Chuck所说。

【讨论】:

    【解决方案5】:

    我找到的唯一解决方案是在这篇帖子HERE

    private string GetQueryStringValueFromRawUrl(string queryStringKey)
    {
        var currentUri = new Uri(HttpContext.Request.Url.Scheme + "://" +
                       HttpContext.Request.Url.Authority +
                       HttpContext.Request.RawUrl);
        var queryStringCollection = HttpUtility.ParseQueryString((currentUri).Query);
        return queryStringCollection.Get(queryStringKey);
    }
    

    【讨论】:

      【解决方案6】:

      使用 ASP.Net 2.0 解决方案,我必须执行以下操作:

          private string GetParameterFromRawUrl(string parameter)
          {
              var rawUrl = Request.RawUrl;
              int indexOfParam = rawUrl.IndexOf(parameter);
              int indexOfNextParam = rawUrl.IndexOf('&', indexOfParam);
              string result;
      
              if (indexOfNextParam < 1)
              {
                  result = rawUrl.Substring(indexOfParam);
              }
              else
              {
                  result = rawUrl.Substring(indexOfParam, (indexOfNextParam-indexOfParam));
              }
      
              return result;
          }
      

      【讨论】:

        猜你喜欢
        • 2012-03-23
        • 2018-05-15
        • 2020-03-18
        • 1970-01-01
        • 2016-04-22
        • 2017-10-06
        • 1970-01-01
        • 2012-06-19
        • 1970-01-01
        相关资源
        最近更新 更多