Dartでクエリ文字列を安全に解析するにはどうすればよいですか?
q
次の値の文字列があると仮定します。
?page=main&action=front&sid=h985jg9034gj498g859gh495
理想的には、コードはサーバーとクライアントの両方で機能するはずですが、今のところ、機能するクライアント側のコードに落ち着きます。
Dartでクエリ文字列を安全に解析するにはどうすればよいですか?
q
次の値の文字列があると仮定します。
?page=main&action=front&sid=h985jg9034gj498g859gh495
理想的には、コードはサーバーとクライアントの両方で機能するはずですが、今のところ、機能するクライアント側のコードに落ち着きます。
シンプルであるほど良い。クラス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.
私はその目的のために正確に単純なパッケージを作成しました: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仕様の一部ではないため、サポートされていません。
私はちょうどこのようにそれをしました:
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から 取得しました