zoukankan      html  css  js  c++  java
  • URL处理两个小工具方法

    有的时候我们要操作一个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
  • 相关阅读:
    【转】快速Redhat AS4和AS5升级至Centos系统
    linux 控制cpu利用率,已经远程访问linux和文件传输
    linux windows启动问题
    Skyline TEP5.1.3二次开发入门——初级(五)
    Skyline TEP5.1.3二次开发入门——初级(四)
    Skyline TEP5.1.3二次开发入门——初级(三)
    Skyline TEP5.1.3二次开发入门——初级(六)
    基于Skyline的TEP5.1.3实现对矢量SHP文件的加载和渲染
    如何在WPF中嵌入Skyline提供的三维控件
    共享一些可以通过网络访问的MPT地址
  • 原文地址:https://www.cnblogs.com/think/p/408863.html
Copyright © 2011-2022 走看看