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

时间:2012-10-28 12:10:03

标签: query-string dart

如何在Dart中安全地解析查询字符串?

假设我有q字符串,其值为:

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

理想情况下,代码应该在服务器和客户端都可以工作,但是现在我将满足于工作的客户端代码。

2 个答案:

答案 0 :(得分:15)

越简单越好。查找类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.

答案 1 :(得分:6)

我为此准确地制作了一个简单的包: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规范的一部分。