URL处理两个小工具方法
生活随笔
收集整理的這篇文章主要介紹了
URL处理两个小工具方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章出處:http://blog.csdn.net/ronanlin/archive/2006/08/30/1143090.aspx
有的時候我們要操作一個URL地址中查詢參數,為了不破壞URL的原有結構,我們一般不能直接在URL的后面加&query=value,特別是我們的URL中有多個參數時,這種處理更麻煩。
下面兩個小方法就是專門用來為一個URL添加一個查詢參數或刪除一個查詢參數,這兩個方法隱藏了原URL有無參數,是不是原來就有這個參數,有沒有fragment(#anchor)這些細節和處理
????????/**////?<summary>
????????///?Add?a?query?to?an?URL.
????????///?if?the?URL?has?not?any?query,then?append?the?query?key?and?value?to?it.
????????///?if?the?URL?has?some?queries,?then?check?it?if?exists?the?query?key?already,replace?the?value,?or?append?the?key?and?value
????????///?if?the?URL?has?any?fragment,?append?fragments?to?the?URL?end.
????????///?</summary>
????????public?static?string?SafeAddQueryToURL(string?key,string?value,string?url)
????????{
????????????int?fragPos?=?url.LastIndexOf("#");
????????????string?fragment?=?string.Empty;
????????????if(fragPos?>?-1)
????????????{
????????????????fragment?=?url.Substring(fragPos);
????????????????url?=?url.Substring(0,fragPos);
????????????}
????????????int?querystart?=?url.IndexOf("?");
????????????if(querystart?<?0)
????????????{
????????????????url?+="?"+key+"="+value;
????????????}
????????????else
????????????{
????????????????Regex?reg?=?new?Regex(@"(?<=[&\?])"+key+@"=[^\s]*",RegexOptions.Compiled);
????????????????if(reg.IsMatch(url))
????????????????????url?=?reg.Replace(url,key+"="+value);
????????????????else
????????????????????url?+=?"&"+key+"="+value;
????????????}
????????????return?url+fragment;
????????}
????????/**////?<summary>
????????///?Remove?a?query?from?url
????????///?</summary>
????????///?<param?name="key"></param>
????????///?<param?name="url"></param>
????????///?<returns></returns>
????????public?static?string?SafeRemoveQueryFromURL(string?key,string?url)
????????{
????????????Regex?reg?=?new?Regex(@"[&\?]"+key+@"=[^\s]*&?",RegexOptions.Compiled);
????????????return?reg.Replace(url,new?MatchEvaluator(PutAwayGarbageFromURL));
????????}
????????private?static?string?PutAwayGarbageFromURL(Match?match)
????????{
????????????string?value?=?match.Value;
????????????if(value.EndsWith("&"))
????????????????return?value.Substring(0,1);
????????????else
????????????????return?string.Empty;
????????}
測試:
????????????string?s?=?"http://www.cnblogs.com/?a=1&b=2&c=3#tag";
????????????WL(SafeRemoveQueryFromURL("a",s));
????????????WL(SafeRemoveQueryFromURL("b",s));
????????????WL(SafeRemoveQueryFromURL("c",s));
????????????WL(SafeAddQueryToURL("d","new",s));
????????????WL(SafeAddQueryToURL("a","newvalue",s));
//????????????輸出如下:
//????????????http://www.cnblogs.com/?b=2&c=3#tag
//????????????http://www.cnblogs.com/?a=1&c=3#tag
//????????????http://www.cnblogs.com/?a=1&b=2#tag
//????????????http://www.cnblogs.com/?a=1&b=2&c=3&d=new#tag
//????????????http://www.cnblogs.com/?a=newvalue&b=2&c=3#tag
有的時候我們要操作一個URL地址中查詢參數,為了不破壞URL的原有結構,我們一般不能直接在URL的后面加&query=value,特別是我們的URL中有多個參數時,這種處理更麻煩。
下面兩個小方法就是專門用來為一個URL添加一個查詢參數或刪除一個查詢參數,這兩個方法隱藏了原URL有無參數,是不是原來就有這個參數,有沒有fragment(#anchor)這些細節和處理
????????/**////?<summary>
????????///?Add?a?query?to?an?URL.
????????///?if?the?URL?has?not?any?query,then?append?the?query?key?and?value?to?it.
????????///?if?the?URL?has?some?queries,?then?check?it?if?exists?the?query?key?already,replace?the?value,?or?append?the?key?and?value
????????///?if?the?URL?has?any?fragment,?append?fragments?to?the?URL?end.
????????///?</summary>
????????public?static?string?SafeAddQueryToURL(string?key,string?value,string?url)
????????{
????????????int?fragPos?=?url.LastIndexOf("#");
????????????string?fragment?=?string.Empty;
????????????if(fragPos?>?-1)
????????????{
????????????????fragment?=?url.Substring(fragPos);
????????????????url?=?url.Substring(0,fragPos);
????????????}
????????????int?querystart?=?url.IndexOf("?");
????????????if(querystart?<?0)
????????????{
????????????????url?+="?"+key+"="+value;
????????????}
????????????else
????????????{
????????????????Regex?reg?=?new?Regex(@"(?<=[&\?])"+key+@"=[^\s]*",RegexOptions.Compiled);
????????????????if(reg.IsMatch(url))
????????????????????url?=?reg.Replace(url,key+"="+value);
????????????????else
????????????????????url?+=?"&"+key+"="+value;
????????????}
????????????return?url+fragment;
????????}
????????/**////?<summary>
????????///?Remove?a?query?from?url
????????///?</summary>
????????///?<param?name="key"></param>
????????///?<param?name="url"></param>
????????///?<returns></returns>
????????public?static?string?SafeRemoveQueryFromURL(string?key,string?url)
????????{
????????????Regex?reg?=?new?Regex(@"[&\?]"+key+@"=[^\s]*&?",RegexOptions.Compiled);
????????????return?reg.Replace(url,new?MatchEvaluator(PutAwayGarbageFromURL));
????????}
????????private?static?string?PutAwayGarbageFromURL(Match?match)
????????{
????????????string?value?=?match.Value;
????????????if(value.EndsWith("&"))
????????????????return?value.Substring(0,1);
????????????else
????????????????return?string.Empty;
????????}
測試:
????????????string?s?=?"http://www.cnblogs.com/?a=1&b=2&c=3#tag";
????????????WL(SafeRemoveQueryFromURL("a",s));
????????????WL(SafeRemoveQueryFromURL("b",s));
????????????WL(SafeRemoveQueryFromURL("c",s));
????????????WL(SafeAddQueryToURL("d","new",s));
????????????WL(SafeAddQueryToURL("a","newvalue",s));
//????????????輸出如下:
//????????????http://www.cnblogs.com/?b=2&c=3#tag
//????????????http://www.cnblogs.com/?a=1&c=3#tag
//????????????http://www.cnblogs.com/?a=1&b=2#tag
//????????????http://www.cnblogs.com/?a=1&b=2&c=3&d=new#tag
//????????????http://www.cnblogs.com/?a=newvalue&b=2&c=3#tag
轉載于:https://www.cnblogs.com/haaron-john/archive/2006/12/31/608825.html
總結
以上是生活随笔為你收集整理的URL处理两个小工具方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 没想到咱也算得上是先富起来的那一拨
- 下一篇: 发送Gmail邀请.