代码改变世界

NET-URL的操作类

2009-11-29 11:08  liyao_2009  阅读(72)  评论(0)    收藏  举报
  1             public class UrlOper
  2    {
  3        static System.Text.Encoding encoding = System.Text.Encoding.UTF8;
  4
  5        #region URL的64位编码
  6        public static string Base64Encrypt(string sourthUrl)
  7        {
  8            string eurl = HttpUtility.UrlEncode(sourthUrl);
  9            eurl = Convert.ToBase64String(encoding.GetBytes(eurl));
 10            return eurl;
 11        }

 12        #endregion

 13
 14        #region URL的64位解码
 15        public static string Base64Decrypt(string eStr)
 16        {        
 17            if (!IsBase64(eStr))
 18            {
 19                return eStr;
 20            }

 21            byte[] buffer = Convert.FromBase64String(eStr);
 22            string sourthUrl = encoding.GetString(buffer);
 23            sourthUrl = HttpUtility.UrlDecode(sourthUrl);
 24            return sourthUrl;
 25        }

 26        /// <summary>
 27        /// 是否是Base64字符串
 28        /// </summary>
 29        /// <param name="eStr"></param>
 30        /// <returns></returns>

 31        public static bool IsBase64(string eStr)
 32        {
 33            if ((eStr.Length % 4) != 0)
 34            {
 35                return false;
 36            }

 37            if (!Regex.IsMatch(eStr, "^[A-Z0-9/+=]*$", RegexOptions.IgnoreCase))
 38            {
 39                return false;
 40            }

 41            return true;
 42        }

 43        #endregion

 44
 45        /// <summary>
 46        /// 添加URL参数
 47        /// </summary>

 48        public static string AddParam(string url, string paramName, string value)
 49        {
 50            Uri uri = new Uri(url);
 51            if (string.IsNullOrEmpty(uri.Query))
 52            {
 53                string eval = HttpContext.Current.Server.UrlEncode(value);
 54                return String.Concat(url, "?" + paramName + "=" + eval);
 55            }

 56            else
 57            {
 58                string eval = HttpContext.Current.Server.UrlEncode(value);
 59                return String.Concat(url, "&" + paramName + "=" + eval);
 60            }

 61        }

 62        /// <summary>
 63        /// 更新URL参数
 64        /// </summary>

 65        public static string UpdateParam(string url, string paramName, string value)
 66        {
 67            string keyWord = paramName+"=";
 68            int index = url.IndexOf(keyWord)+keyWord.Length;
 69            int index1 = url.IndexOf("&", index);
 70            if (index1 == -1)
 71            {
 72                url = url.Remove(index, url.Length - index);
 73                url = string.Concat(url, value);
 74                return url;
 75            }

 76            url = url.Remove(index,index1 - index);
 77            url = url.Insert(index, value);
 78            return url;
 79        }

 80
 81        #region 分析URL所属的域
 82        public static void GetDomain(string fromUrl, out string domain, out string subDomain)
 83        {
 84            domain = "";
 85            subDomain = "";
 86            try
 87            {
 88                if (fromUrl.IndexOf("的名片") > -1)
 89                {
 90                    subDomain = fromUrl;
 91                    domain = "名片";
 92                    return;
 93                }

 94
 95                UriBuilder builder = new UriBuilder(fromUrl);
 96                fromUrl = builder.ToString();
 97
 98                Uri u = new Uri(fromUrl);
 99
100                if (u.IsWellFormedOriginalString())
101                {
102                    if (u.IsFile)
103                    {
104                        subDomain = domain = "客户端本地文件路径";
105
106                    }

107                    else
108                    {
109                        string Authority = u.Authority;
110                        string[] ss = u.Authority.Split('.');
111                        if (ss.Length == 2)
112                        {
113                            Authority = "www." + Authority;
114                        }

115                        int index = Authority.IndexOf('.', 0);
116                        domain = Authority.Substring(index + 1, Authority.Length - index - 1).Replace("comhttp","com");
117                        subDomain = Authority.Replace("comhttp", "com"); 
118                        if (ss.Length < 2)
119                        {
120                            domain = "不明路径";
121                            subDomain = "不明路径";
122                        }

123                    }

124                }

125                else
126                {
127                    if (u.IsFile)
128                    {
129                        subDomain = domain = "客户端本地文件路径";
130                    }

131                    else
132                    {
133                        subDomain = domain = "不明路径";
134                    }

135                }

136            }

137            catch
138            {
139                subDomain = domain = "不明路径";
140            }

141        }

142
143        /// <summary>
144        /// 分析 url 字符串中的参数信息
145        /// </summary>
146        /// <param name="url">输入的 URL</param>
147        /// <param name="baseUrl">输出 URL 的基础部分</param>
148        /// <param name="nvc">输出分析后得到的 (参数名,参数值) 的集合</param>

149        public static void ParseUrl(string url, out string baseUrl, out NameValueCollection nvc)
150        {
151            if (url == null)
152                throw new ArgumentNullException("url");
153
154            nvc = new NameValueCollection();
155            baseUrl = "";
156
157            if (url == "")
158                return;
159
160            int questionMarkIndex = url.IndexOf('?');
161
162            if (questionMarkIndex == -1)
163            {
164                baseUrl = url;
165                return;
166            }

167            baseUrl = url.Substring(0, questionMarkIndex);
168            if (questionMarkIndex == url.Length - 1)
169                return;
170            string ps = url.Substring(questionMarkIndex + 1);
171
172            // 开始分析参数对    
173            Regex re = new Regex(@"(^|&)?(\w+)=([^&]+)(&|$)?", RegexOptions.Compiled);
174            MatchCollection mc = re.Matches(ps);
175
176            foreach (Match m in mc)
177            {
178                nvc.Add(m.Result("$2").ToLower(), m.Result("$3"));
179            }

180        }

181
182        #endregion

183    }