从URL字符串中提取查询字符串

mic*_*lle 13 c# string query-string

我正在阅读历史,我希望当我遇到谷歌查询时,我可以提取查询字符串.我没有使用请求或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 =,它会给我错误.

有什么建议?

谢谢你的答案,一切似乎都很好:) ps我不能使用httputility,不是我不想.当我添加对system.web的引用时,不包括httputility!它只包含在asp.net应用程序中.再次感谢

Ahm*_*eed 21

目前尚不清楚为什么你不想使用HttpUtility.您可以随时添加引用System.Web并使用它:

var parsedQuery = HttpUtility.ParseQueryString(input);
Console.WriteLine(parsedQuery["q"]);
Run Code Online (Sandbox Code Playgroud)

如果这不是一个选项,那么这种方法可能会有所帮助:

var query = input.Split('&')
                 .Single(s => s.StartsWith("q="))
                 .Substring(2);
Console.WriteLine(query);
Run Code Online (Sandbox Code Playgroud)

它会分裂&并查找以第"q="2位开始的单个拆分结果,并在=符号后面返回所有内容.假设是存在单个匹配,这对于这种情况似乎是合理的,否则将抛出异常.如果不是这种情况,则替换SingleWhere,循环结果并在循环中执行相同的子字符串操作.

编辑:为了涵盖评论中提到的场景,可以使用此更新版本:

int index = input.IndexOf('?');
var query = input.Substring(index + 1)
                 .Split('&')
                 .SingleOrDefault(s => s.StartsWith("q="));

if (query != null)
    Console.WriteLine(query.Substring(2));
Run Code Online (Sandbox Code Playgroud)


Teo*_*gul 6

如果您不想使用System.Web.HttpUtility(因此能够使用客户端配置文件),您仍然可以使用Mono HttpUtility.cs,它只是一个可以嵌入到您的应用程序中的独立.cs文件.然后,您可以简单地使用ParseQueryString类中的方法来正确解析查询字符串.


小智 5

这是解决方案 -

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;
}
Run Code Online (Sandbox Code Playgroud)