【问题标题】:What JavaScript library should I use for parsing URL parameters?我应该使用什么 JavaScript 库来解析 URL 参数?
【发布时间】:2010-11-24 15:54:51
【问题描述】:

如何在 JavaScript 中解析 URL 参数? (这些是我通常会称为GET参数或CGI参数的参数,但在这种情况下页面基本上是提交给自己,而不是服务器,所以没有GET请求,绝对没有CGI程序。)

我在网上看到了许多可以复制的例程,但我不知道它们中的任何一个有多健壮。我已经习惯了 Perl 和 Java 等其他语言,在这些语言中我可以依赖一个经过严格测试且功能强大的库,我知道它可以处理标准中的数百万个小边缘情况。我想在这里也一样,而不仅仅是剪切和粘贴示例。

【问题讨论】:

  • 对于简单的 GET 数据,您期望有多少“边缘情况”?!
  • Josh - 就像 skip 说的,数以百万计的小孩。

标签: javascript


【解决方案1】:

我推荐query-string库

安装:

npm install query-string

用法:

import queryString from 'query-string';

console.log(location.search);
//=> '?foo=bar'

const parsed = queryString.parse(location.search);
console.log(parsed);
//=> {foo: 'bar'}

parsed.foo = 'unicorn';
parsed.ilike = 'pizza';

const stringified = queryString.stringify(parsed);
//=> 'foo=unicorn&ilike=pizza'

location.search = stringified;
// note that `location.search` automatically prepends a question mark
console.log(location.search);
//=> '?foo=unicorn&ilike=pizza'

https://www.npmjs.com/package/query-string

【讨论】:

    【解决方案2】:

    这里有两个简单的函数来完成这项工作:http://adamv.com/dev/javascript/querystring

    以下是 API 参考示例:

    var qs = new Querystring();
    
    // Parse a given querystring
    var qs2 = new Querystring("name1=value1&name2=value2");
    
    var v1 = qs2.get("name1");
    var v3 = qs2.get("name3", "default value");
    

    【讨论】:

    • 谢谢。那是轻量级和最小的,但仍然实现了我想要的:一个库,而不是要复制的示例。本来想用JQuery的,今天好像没搞清楚,得等下一次了。
    • 我发布这些而不是 jQuery 的原因是因为您不需要一个完整的框架来管理这些简单的任务。
    • 是的,今天很高兴不必依赖整个框架。
    • 提供的链接已失效。
    • @ChristosBatzilis 毫不奇怪,因为它是在 12 年前发布的。我现在更新了链接以使用 Wayback 机器。
    【解决方案3】:

    我发现这对于简单的 url 解析、修改 url(比如添加新的查询参数)很有用:https://github.com/derek-watson/jsUri

    【讨论】:

    • 浏览器对jsUri的兼容性如何?
    【解决方案4】:

    我使用此处提供的 parseUri 库: http://stevenlevithan.com/demo/parseuri/js/

    它可以让你完全按照你的要求去做:

    var uri = 'http://google.com/?q=stackoverflow';
    var q = uri.queryKey['q'];
    // q = 'stackoverflow'
    

    到目前为止,我已经使用了一段时间,没有遇到任何问题。

    【讨论】:

      【解决方案5】:

      我认为这个库会很好用,它是独立的,所以你可以将它与 JQuery 或 YAHOO 或 Dojo 一起使用,另一个优点是它有很好的文档记录。

      http://www.openjsan.org/doc/t/th/theory/HTTP/Query/0.03/lib/HTTP/Query.html
      

      在这种情况下,您可以使用 HTTP.Query 为您完成所有工作。它只有 1.2 KB 的压缩大小,因此您甚至可以根据需要将其包含在更大的库中。

      【讨论】:

        【解决方案6】:

        Javascript 没有内置对 URL 参数的支持。

        无论如何,location.search 属性会返回当前页面 URL 中从问号 ('?') 开始的部分。

        由此,您可以编写自己的参数解析器,也可以使用最常见的 Javascript 框架中可用的一种,例如 JQuery 和类似框架。

        【讨论】:

          【解决方案7】:

          我发现最好的方法是自己做,然后将参数汇集到一个全局键/值对象中。

          获取查询参数很简单...

          只需要几个 .split() 的

          var myquery = thewholeurl.split("?")[1]; //will get the whole querystring with the ?
          

          那么你可以做一个

          myparams = myquery.split("&")

          那你就可以了

          for each param in myparams
          {
          temp = param.split("=");
          
          mykeys.push(temp[0]);
          myvalues.push(temp[1]);
          
          OR
          
          myObject[temp[0]] = temp[1];
          }
          

          这只是风格问题。

          这不是完美的代码,只是给你提供想法的伪代码。

          【讨论】:

          • 如果你这样做,你需要通过decodeURIComponent运行键和值。
          【解决方案8】:

          如果是“提交给自己”,需要做GET参数吗?

          但是如果你这样做了,大多数浏览器现在都有decodeURIComponent 函数来处理单个参数;您的工作是将它们拆分为 & (String#split 会很好地做到这一点)。如果你想要一个库,jQuery 和 Prototype 都可以很好地使用和测试。

          【讨论】:

            【解决方案9】:

            【讨论】:

            • 我想走这条路,但是今天学习和工作的东西太多了。对于任何有足够能力并且可以处理 jQuery 框架开销的人来说,这是我的首选答案。
            • "jQuery URL 解析器。"链接坏了。
            猜你喜欢
            • 2020-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2010-10-18
            • 1970-01-01
            • 1970-01-01
            • 2020-02-16
            • 2017-01-26
            相关资源
            最近更新 更多