internal static NameValueCollection InternalParseQueryString(string query, Encoding encoding) { int len; if (query == null || (len = query.Length) == 0 || (len == 1 && query[0] == '?')) { return(new NameValueCollection(1)); } if (query[0] == '?') { query = query.Substring(1); } var res = new QueryStringCollection(); var components = query.Split('&'); foreach (var component in components) { var i = component.IndexOf('='); if (i > -1) { var name = UrlDecode(component.Substring(0, i), encoding); var val = component.Length > i + 1 ? UrlDecode(component.Substring(i + 1), encoding) : String.Empty; res.Add(name, val); } else { res.Add(null, UrlDecode(component, encoding)); } } return(res); }
public static QueryStringCollection Parse(string query, Encoding encoding) { if (query == null) { return(new QueryStringCollection(1)); } var len = query.Length; if (len == 0) { return(new QueryStringCollection(1)); } if (query == "?") { return(new QueryStringCollection(1)); } if (query[0] == '?') { query = query.Substring(1); } if (encoding == null) { encoding = Encoding.UTF8; } var ret = new QueryStringCollection(); var components = query.Split('&'); foreach (var component in components) { len = component.Length; if (len == 0) { continue; } if (component == "=") { continue; } var i = component.IndexOf('='); if (i < 0) { ret.Add(null, urlDecode(component, encoding)); continue; } if (i == 0) { ret.Add(null, urlDecode(component.Substring(1), encoding)); continue; } var name = urlDecode(component.Substring(0, i), encoding); var start = i + 1; var val = start < len ? urlDecode(component.Substring(start), encoding) : String.Empty; ret.Add(name, val); } return(ret); }