如何解析Dart中的查询字符串?

bvjxkvbb  于 2023-07-31  发布在  其他
关注(0)|答案(4)|浏览(99)

如何在Dart中安全地解析查询字符串?
假设我有一个q字符串,其值为:

?page=main&action=front&sid=h985jg9034gj498g859gh495

字符串
理想情况下,代码应该在服务器端和客户端都能工作,但现在我将满足于一个能工作的客户端代码。

ugmeyewa

ugmeyewa1#

越简单越好查找Uri类的splitQueryString静态方法。

Map<String, String> splitQueryString(String query, {Encoding encoding: UTF8}) 

Returns the query split into a map according to the rules specified for 
FORM post in the HTML 4.01 specification section 17.13.4. Each key and value 
in the returned map has been decoded. If the query is the empty string an 
empty map is returned.

字符串

svmlkihl

svmlkihl2#

我已经为这个目的做了一个简单的程序包:https://github.com/kaisellgren/QueryString
范例:

import 'package:query_string/query_string.dart');

void main() {
  var q = '?page=main&action=front&sid=h985jg9034gj498g859gh495&enc=+Hello%20&empty';

  var r = QueryString.parse(q);

  print(r['page']); // "main"
  print(r['asdasd']); // null
}

字符串
其结果是Map。访问参数只是一个简单的r['action'],而访问不存在的查询参数则是null
现在,要安装,请将其作为依赖项添加到pubspec.yaml

dependencies:
  query_string: any


然后运行pub install
该库还可以处理%20+等对象的解码,甚至可以处理空参数。
它不支持“数组样式参数,”因为它们不是RFC 3986规范的一部分。

nwlls2ji

nwlls2ji3#

我是这样做的:

Map<String, String> splitQueryString(String query) {
    return query.split("&").fold({}, (map, element) {
      int index = element.indexOf("=");
      if (index == -1) {
        if (element != "") {
          map[element] = "";
        }
      } else if (index != 0) {
        var key = element.substring(0, index);
        var value = element.substring(index + 1);
        map[key] = value;
      }
      return map;
    });
 }

字符串
我从splitQueryString中获取的

r9f1avp5

r9f1avp54#

所有的答案都已经过时了
最快和最简单的方法:

Uri uri = Uri(query: data);

var queryParameters = uri.queryParameters;

var myValue = queryParameters["my_value"];

字符串

相关问题