[工具类]获取url中参数列表

写在前面

在项目中经常用到解析url中参数的逻辑,今天先下载就自己封装了一个方法,方便以后使用的时候,信手拈来。当然这里给出的方法是针对常见的url参数类型的,对于重写url,或者路由格式的不考虑。

c#方法

        /// <summary>
        /// 获取url中参数
        /// </summary>
        /// <param name="url">要解析的url</param>
        /// <param name="baseUrl">基地址</param>
        /// <returns>参数键值对</returns>
        public static NameValueCollection GetUrlParamters(string url, out string baseUrl)
        {
            if (string.IsNullOrEmpty(url))
            {
                throw new ArgumentNullException("url");
            }
            NameValueCollection nameValueCollection = new NameValueCollection();
            if (url.IndexOf('?') == -1)
            {
                baseUrl = url;
                return nameValueCollection;
            }
            string[] strUrlParts = url.Split('?');
            baseUrl = strUrlParts[0];
            Regex regex = new Regex(@"(^|&)?(?<key>\w+)=(?<value>[^&]+)(&|$)?", RegexOptions.Compiled);
            MatchCollection matches = regex.Matches(url);
            foreach (Match item in matches)
            {
                if (item.Success)
                {
                    nameValueCollection.Add(item.Groups["key"].Value, item.Groups["value"].Value);
                }
            }
            return nameValueCollection;
        }

测试

        static void Main(string[] args)
        {
            string url = "https://www.baidu.com?p=23432&w=sss&s=kkkdfd";
            string baseUrl = string.Empty;
            NameValueCollection parameters = GetUrlParamters(url, out baseUrl);
            Console.WriteLine(baseUrl);
            foreach (var item in parameters.Keys)
            {
                Console.WriteLine(item + "=" + parameters[item.ToString()].ToString());
            }
            Console.Read();
        }

 

js方法

    <script>
        var getParameters = function (url) {
            var nameValues = [];
            if (url) {
                if (url.indexOf('?') == -1) {
                    return nameValues.push({ baseUrl: url });
                };
                var arrUrlParts = url.split('?');
                var baseUrl = arrUrlParts[0];
                console.log(arrUrlParts[1]);
                var urlParameters=arrUrlParts[1].split('&');
                for (var i = 0; i < urlParameters.length; i++) {
                    console.log(urlParameters[i]);
                    var nameValue = urlParameters[i].split('=');
                    nameValues.push({ baseUrl: baseUrl, key: nameValue[0], value: nameValue[1]});
                };
                return nameValues;
            };
        };
        console.log(getParameters('https://www.baidu.com?p=23432&w=sss&s=kkkdfd'));

 测试

 总结

这里将常用的方法封装一下,方便以后使用。

### Java解析URL参数工具类 下面提供一个完整的Java工具类用于解析URL中的参数。此工具类基于`java.net.URL`和`java.net.URLDecoder`,能够提取并解码URL中的查询参数。 #### 工具类代码 ```java import java.io.UnsupportedEncodingException; import java.net.URL; import java.net.URLDecoder; import java.util.HashMap; import java.util.Map; public class UrlParameterParser { /** * 解析URL中的参数为Map结构 * * @param urlString 完整的URL字符串 * @return 包含参数名和对应值的Map */ public static Map<String, String> parseUrlParameters(String urlString) { try { // 将URL字符串转换为URL对象 URL url = new URL(urlString); String query = url.getQuery(); // 获取查询部分 if (query == null || query.isEmpty()) { return new HashMap<>(); // 如果没有查询参数,则返回空Map } // 调用辅助方法解析查询字符串 return splitQuery(query); } catch (Exception e) { throw new RuntimeException("无法解析URL参数", e); } } /** * 辅助方法:将查询字符串拆分为键值对 * * @param query 查询字符串 * @return 包含参数名和对应值的Map * @throws UnsupportedEncodingException 如果编码不支持 */ private static Map<String, String> splitQuery(String query) throws UnsupportedEncodingException { Map<String, String> result = new HashMap<>(); for (String param : query.split("&")) { String[] pair = param.split("="); String key = URLDecoder.decode(pair[0], "UTF-8"); String value = ""; if (pair.length > 1) { value = URLDecoder.decode(pair[1], "UTF-8"); } result.put(key, value); // 存储到Map中 } return result; } public static void main(String[] args) { String testUrl = "https://example.com/search?name=John%20Doe&age=30"; Map<String, String> parameters = parseUrlParameters(testUrl); System.out.println("解析后的参数:"); for (Map.Entry<String, String> entry : parameters.entrySet()) { System.out.println(entry.getKey() + ": " + entry.getValue()); } } } ``` 上述代码实现了以下功能: - 使用`java.net.URL`类解析输入的URL字符串[^1]。 - 提取URL中的查询部分,并通过自定义逻辑将其分割成键值对[^2]。 - 利用`java.net.URLDecoder`对参数进行解码处理,确保特殊字符被正确还原。 运行该程序时,会输出测试URL中的所有参数及其对应的值。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值