示例#1
0
        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);
        }