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
  • 相关阅读:
    利用bat合并两个hex文件
    Laravel中使用自己的类库三种方式
    Carbon 的 diffForHumans 方法
    5 个 Laravel Eloquent 小技巧
    laravel 批量更新
    laravel 打印sql语句
    PHP获取客户端的IP地址
    PHP跨域访问
    解析URL参数
    转: 雅虎35条优化黄金守则
  • 原文地址:https://www.cnblogs.com/think/p/408863.html
Copyright © 2011-2022 走看看