4

Dartでクエリ文字列を安全に解析するにはどうすればよいですか?

q次の値の文字列があると仮定します。

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

理想的には、コードはサーバーとクライアントの両方で機能するはずですが、今のところ、機能するクライアント側のコードに落ち着きます。

4

3 に答える 3

17

シンプルであるほど良い。クラス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.
于 2013-12-02T19:03:13.367 に答える
7

私はその目的のために正確に単純なパッケージを作成しました: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ライブラリは、やなどのデコードも処理+し、空のパラメータに対しても機能します。

「配列スタイルパラメータ」はRFC3986仕様の一部ではないため、サポートされていません。

于 2012-10-28T12:18:54.013 に答える
0

私はちょうどこのようにそれをしました:

 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から 取得しました

于 2021-05-22T13:51:52.353 に答える