Dart 中有进行 urlencoding 的函数吗?我正在使用 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
更新:现在在Dart Uri 类
中支持编码/解码 URIDart 的 URI 代码放置在一个名为 dart:uri 的单独库中(因此可以在
dart:html
和 dart:io
之间共享)。看起来它目前不包含 urlencode
函数,因此目前最好的选择可能是使用 this JavaScript 的 encodeUriComponent
的 Dart 实现。
Uri.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("&");
}
我认为还没有。查看 http://unpythonic.blogspot.com/2011/11/oauth20-and-jsonp-with-dartin-web.html 和encodeComponent 方法。
注意,它也缺少一些字符,需要扩展。 Dart 确实应该内置此功能并且易于访问。事实上可能有,但我没有找到。
flutter 中的安全 URL 编码
例如
String url = 'http://example.org/';
String postDataKey = "requestParam="
String postData = 'hdfhghdf+fdfbjdfjjndf'
如果收到请求:
Uri.encodeComponent(url+postDataKey+postData);
如果是发布数据请求,请使用 flutter_inappwebview 库
var data = postDataKey + Uri.encodeComponent(postData);
webViewController.postUrl(url: Uri.parse(url), postData: utf8.encode(data));
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';
这个解决方案对我来说效果很好。构建一个 Uri,将 Map 传递给 queryParameters。通过
获取编码数据Uri(queryParameters: <Map data>).query;
例如:
Uri(queryParameters: {'key1': val1, 'key2': val2}).query;