A string replacement question with C#
在Q=是固定参数的URL中,如何删除粗体字符串?
http://abc.com/qwe.aspx?Q=dieyegjgnwvpsj32ic1sy5x1zyjoztqzd9mjwl2eqj8=&;U=/foo/boo/kb
谢谢。
这很简单。我使用System.Uri类来解析URL,然后删除q查询字符串参数,然后在不使用此参数的情况下构建一个新的URL:
1 2 3 4 5 6
| 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。
- +我认为这是最干净和最安全的解决方案!
- 这应该是删除查询参数最安全的方法。
- 代码太多,无法完成一件简单的事情。如果这一点是在httpRequest中找到的URL,那么这可能是一个过度杀伤力。我将投票支持Regex解决方案。
- 下面所提到的regex解决方案(目前编写的)不仅与名为q的参数匹配,而且与以q结尾的所有参数都不匹配,因此无法按预期工作。
- 这不是最简单的解决方案,但考虑到URL源缺乏上下文,它绝对是最正确的。+ 1
input = Regex.Replace(input,"q=[^&]+","")将是实现这一目标的一种方法。
- 你需要对这个小心一点,因为像"uq=something"这样的参数会被无意中删除。
- 不,不会的,"q="won't match"qu."
- @马吕斯,难道瑞格家族的埃多克斯人不阻止吗?
- 对不起,我拼错了参数名(我现在已经修改了)。我想到一个叫UQ的参数。
- qu=将被替换:gskinner.com/regexr/?2TiA1
- @马吕斯,说得对。如果这是一种可能性,我们总是可以为[?&]增加一个后视。
- @zebi:确实,模式匹配q=/foo/boo/-但是,uq=/foo/boo/不应该匹配!
可能这个URL来自某个请求,这意味着您在httpRequest实例中有一个与httpContext关联的查询字符串。
在这种情况下,只需调用HttpContext.Current.Request.QueryString.Remove("q");就可以删除"q"查询字符串参数。
另一个解决办法是亚历克斯提出的。
位置是否固定?你可以做一个IndexOf("q=")和IndexOf("u="),用SubString两次来拆卸零件。另一种方法是使用正则表达式。
如果q是固定参数….
1
| str = str.Replace("q=DIEYeGJgNwvPSJ32ic1sY5x1ZYjOZTQZD9mjWl2EQJ8=",""); |
否则我会:
1 2 3
| var qa = Request.QueryString;
qa.Remove("q");
var queryString = qa.ToString(); |
- 这没有帮助-参数名称是固定的,而不是其值!
- 他说已经修好了。无论如何,我添加了对变量值查询字符串所做的操作。
- 参数名是固定的,不是Q=后的字符串!
- @马吕斯·舒尔茨,你怎么知道的?他说q= is fixed parameter,这让我觉得参数不变。
- 我推断Q=部分是固定的,因为Ricky用粗体写了那个部分。