【问题标题】:A string replacement question with C#C# 字符串替换问题
【发布时间】:2011-04-15 13:03:57
【问题描述】:

如何在 q= 是固定参数的以下网址中删除 bold 中的字符串?

http://abc.com/qwe.aspx?q=DIEYeGJgNwvPSJ32ic1sY5x1ZYjOZTQZD9mjWl2EQJ8=&u=/foo/boo/kb

谢谢。

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    这很简单。我使用System.Uri类解析url,然后去掉q查询字符串参数,然后新建一个不带这个参数的url:

    var url = new Uri("http://abc.com/qwe.aspx?q=DIEYeGJgNwvPSJ32ic1sY5x1ZYjOZTQZD9mjWl2EQJ8=&u=/foo/boo/kb");
    var query = HttpUtility.ParseQueryString(url.Query);
    query.Remove("q");
    UriBuilder ub = new UriBuilder(url);
    ub.Query = query.ToString();
    var result = ub.Uri.ToString();
    

    现在result 持有价值:http://abc.com/qwe.aspx?u=/foo/boo/kb。

    【讨论】:

    • 这应该是删除查询参数最安全的方法。
    • 代码太多,做一件简单的事。如果关键是 url 是在 HttpRequest 中找到的,那么,这可能是一种矫枉过正。我会投票支持正则表达式解决方案。
    • 下面提到的正则表达式解决方案,因为它现在编写的不仅仅是匹配名为 q 的参数,而是匹配所有以 q 结尾的参数因此无法按预期工作。
    • 不是最简单的解决方案,但考虑到 URL 的来源缺乏上下文,它绝对是最正确的。 +1
    【解决方案2】:

    input = Regex.Replace(input, "q=[^&]+", "") 是一种方法。

    【讨论】:

    • 你需要小心这个,因为像“uq=something”这样的参数会被无意中删除。
    • 不,它不会,"q=" 不会匹配 "qu="。
    • @Marius,正则表达式的q= 部分不会阻止这种情况吗?
    • 对不起,我拼错了参数名称(我现在已经修复了)。我想到了一个叫uq的参数。
    • @Marius,说得好。如果有可能,我们总是可以为 [?&] 添加一个后视功能。
    【解决方案3】:

    位置是固定的吗?您可以使用IndexOf("q=") 和IndexOf("u=") 并使用SubString 两次来删除该部分。另一种方法是使用正则表达式。

    【讨论】:

      【解决方案4】:

      也许这个 URL 来自某个请求,这意味着您在 HttpRequest 实例中拥有与 HttpContext 关联的查询字符串。

      在这种情况下,您始终可以通过调用HttpContext.Current.Request.QueryString.Remove("q"); 来删除“q”查询字符串参数

      另一个解决方案是 Alex 建议的解决方案。

      【讨论】:

        【解决方案5】:

        如果Q是一个固定参数......

        str = str.Replace("q=DIEYeGJgNwvPSJ32ic1sY5x1ZYjOZTQZD9mjWl2EQJ8=", "");
        

        否则我会这样做:

        var qa = Request.QueryString;
        qa.Remove("q");
        var queryString = qa.ToString();
        

        【讨论】:

        • 这没有帮助 - 参数 name 是固定的,而不是它的值!
        • 他说已经修好了。无论如何,我添加了我会为变量值查询字符串做的事情。
        • 参数名是固定的,不是q=后面的字符串!
        • @Marius Schulz,你怎么知道的?他说q= is fixed parameter这让我觉得参数没有改变。
        • 我推断只有 q= 部分是固定的,因为 Ricky 用粗体写了该部分。
        猜你喜欢
        • 2011-11-24
        • 2010-10-04
        • 2015-10-11
        • 1970-01-01
        • 1970-01-01
        • 2020-03-15
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        相关资源
        最近更新 更多