我正在阅读历史,我希望当我遇到google查询时,我可以提取查询字符串。我没有使用request或httputility,因为我只是在解析一个字符串。然而,当我遇到这样的URL时,我的程序无法正确地解析它:
http://www.google.com.mt/search?client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&channel=s&hl=mt&source=hp&biw=986&bih=663&q=hotmail&meta=&btnG=Fittex+bil-Google
我试图做的是得到q=的索引和&的索引,然后取中间的单词,但在本例中,&的索引将小于q=,它会给出错误。
有什么建议吗?
谢谢你的回答,看起来一切都很好:)附言。我不能使用httputility,不是我不想用。当我添加对system.web的引用时,when实用程序没有包括在内!它只包含在asp.net应用程序中。再次感谢
发布于 2011-05-21 23:30:10
现在还不清楚为什么你不想使用HttpUtility。您可以随时添加对System.Web的引用并使用它:
var parsedQuery = HttpUtility.ParseQueryString(input);
Console.WriteLine(parsedQuery["q"]);如果这不是一种选择,那么这种方法可能会有所帮助:
var query = input.Split('&')
.Single(s => s.StartsWith("q="))
.Substring(2);
Console.WriteLine(query);它在&上拆分,并查找以"q="开头的单个拆分结果,并采用位置2处的子字符串返回=符号之后的所有内容。假设只有一个匹配,这对于这种情况似乎是合理的,否则将抛出异常。如果不是这样,那么用Where替换Single,遍历结果并在循环中执行相同的子字符串操作。
EDIT:以涵盖注释中提到的场景此更新版本可以使用:
int index = input.IndexOf('?');
var query = input.Substring(index + 1)
.Split('&')
.SingleOrDefault(s => s.StartsWith("q="));
if (query != null)
Console.WriteLine(query.Substring(2));发布于 2011-05-21 23:25:00
如果您不想使用System.Web.HttpUtility (因此可以使用客户端配置文件),您仍然可以使用Mono HttpUtility.cs,它只是一个可以嵌入到应用程序中的独立.cs文件。然后,您可以简单地在类中使用ParseQueryString方法来正确地解析查询字符串。
发布于 2013-12-10 21:12:43
以下是解决方案-
string GetQueryString(string url, string key)
{
string query_string = string.Empty;
var uri = new Uri(url);
var newQueryString = HttpUtility.ParseQueryString(uri.Query);
query_string = newQueryString[key].ToString();
return query_string;
}https://stackoverflow.com/questions/6082664
复制相似问题