在Dart中有没有进行URL编码的函数?我正在使用XMLHttpRequest对象进行AJAX调用,我需要将URL进行URL编码。
我在dartlang.org上做了搜索,但没有找到任何结果。
var uri = 'http://example.org/api?foo=some message';
var encoded = Uri.encodeFull(uri);
assert(encoded == 'http://example.org/api?foo=some%20message');
var decoded = Uri.decodeFull(encoded);
assert(uri == decoded);
http://www.dartlang.org/docs/dart-up-and-running/contents/ch03.html#ch03-uri
Uri.encodeComponent(url);
- Andrei LesnitskyUri.encodeComponent(url); // To encode url
Uri.decodeComponent(encodedUrl); // To decode url
我编写了这个小函数,用于将Map转换为URL编码字符串,这可能是你正在寻找的。
String encodeMap(Map data) {
return data.keys.map((key) => "${Uri.encodeComponent(key)}=${Uri.encodeComponent(data[key])}").join("&");
}
Uri.encodeComponent()
是正确的,Uri.encodeFull()
存在一个错误,请参考下面的示例:
void main() {
print('$text\n');
var coded = Uri.encodeFull(text);
print(coded);
print('\n');
coded = Uri.encodeComponent(text);
print(coded);
}
var text = '#2020-02-29T142022Z_1523651918_RC2EAF9OOHDB_RT.jpg';
在Flutter中进行安全的URL编码
例如:
String url = 'http://example.org/';
String postDataKey = "requestParam="
String postData = 'hdfhghdf+fdfbjdfjjndf'
对于 GET 请求:
Uri.encodeComponent(url+postDataKey+postData);
如果需要进行POST数据请求,请使用flutter_inappwebview库
var data = postDataKey + Uri.encodeComponent(postData);
webViewController.postUrl(url: Uri.parse(url), postData: utf8.encode(data));
Uri(queryParameters: <Map data>).query;
例如:
Uri(queryParameters: {'key1': val1, 'key2': val2}).query;