【问题标题】:Encoding StringBuilder querystring编码 StringBuilder 查询字符串
【发布时间】:2014-04-25 15:21:49
【问题描述】:

我有一些示例代码,我想在其中构建查询字符串,但在代码末尾,该字符串未正确编码以在浏览器中使用。

public partial class UrlBuilder : System.Web.UI.UserControl
    {
        public string Title { get; set; }
        public string Url { get; set; }
        public bool EnableQryString { get; set; }

        public string QueryString1 { get; set; }
        public string QueryString2 { get; set; }
        public string QueryString3 { get; set; }
        public string QueryString4 { get; set; }
        public string QueryString5 { get; set; }

        protected void Page_Load(object sender, EventArgs e)
        {
            lnkUrl.Text = Title;
            lnkUrl.NavigateUrl = Url;

            if (EnableQryString)
            {
                StringBuilder SB = new StringBuilder();
                SB.AppendLine("?");

                #region Query String builder
                if (!QueryString1.IsNullOrEmpty())
                {
                    SB.AppendLine(QueryString1);
                }

                if (!QueryString2.IsNullOrEmpty())
                {
                    SB.AppendLine("&" + QueryString2);
                }

                if (!QueryString3.IsNullOrEmpty())
                {
                     SB.AppendLine("&" + QueryString3);
                }

                if (!QueryString4.IsNullOrEmpty())
                {
                     SB.AppendLine("&" + QueryString4);
                }

                if (!QueryString5.IsNullOrEmpty())
                {
                    SB.AppendLine("&" + QueryString5);
                }

                #endregion
                lnkUrl.NavigateUrl += HttpUtility.UrlEncode(SB.ToString());
            }
        }
    }

这是后面的字符串:

HttpUtility.UrlEncode(SB.ToString());

http://www.google.com%3f%0d%0aA%3d1%0d%0a%26B%3d2%0d%0a

我认为我没有正确使用 UrlEncode。有人可以帮忙吗?

谢谢!

【问题讨论】:

  • 你希望字符串是什么样子的?
  • @Thewads 我期待一个标准的网址,例如www.google.co.uk 但如果布尔值是真的,我有更改字符串的逻辑。我希望 www.google.co.uk?A=1&B=2

标签: c# encoding urlencode encode stringbuilder


【解决方案1】:

您正在使用AppendLine,它在您的字符串中添加回车符(新行),这可以通过您的网址字符串中的%0d 看到。

只需更改您的逻辑以使用字符串生成器Append 方法。

例如:

if (!QueryString1.IsNullOrEmpty())
{
    SB.Append(QueryString1);
}

编辑:或者如果您只想对参数进行编码。

if (!QueryString1.IsNullOrEmpty())
{
    SB.Append(HttpUtility.UrlEncode(QueryString1));
}

我认为这两种方式都可以,http://msdn.microsoft.com/en-us/library/h10z5byc.aspx 的文档说它可以用来对整个 URL 进行编码

【讨论】:

  • 嘿,我在将我的 URL 分配给 lnkUrl 时遇到问题,即当字符串有回车时。我会更新我的代码。
  • 调试完成后,我将鼠标悬停在 URL 上,它是正确的。感谢您的帮助。
【解决方案2】:

您应该在查询字符串的每个单独值上调用HttpUtility.UrlEncode(),而不是在整个字符串上。所以像

SB.Append("&name=" + HttpUtility.UrlEncode(value));

【讨论】:

    【解决方案3】:

    您正在对所有 url 进行编码,您应该只对参数值进行编码,因此当您对其进行编码时,您必须在设置 QueryStringX 之前对这些值进行编码,并且不要对其他任何内容进行编码。

    或者更好的方法,在您的 QueryStringX 中执行,当调用 set 时,用“=”分割值,对结果的第二部分进行编码,将它们连接到一个字符串中并存储以供以后使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-07-28
      • 1970-01-01
      • 2011-06-16
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 2017-11-01
      相关资源
      最近更新 更多