Dart中的URL编码

68

在Dart中有没有进行URL编码的函数?我正在使用XMLHttpRequest对象进行AJAX调用,我需要将URL进行URL编码。

我在dartlang.org上做了搜索,但没有找到任何结果。

8个回答

89

1
获取错误 - URI 中存在非法的百分号编码 - Kamlesh

40
更新: 现在Dart Uri类支持对URI进行编码/解码。
Dart的URI代码放置在名为dart:uri的单独库中(因此可以在dart:htmldart:io之间共享)。目前看来,它似乎不包括urlencode函数,因此您现在最好的选择可能是使用this Dart实现JavaScript的encodeUriComponent

1
我认为现在可以接受。但如果这能被添加到dart:uri中就更好了。 - Sudar
@Sudar同意,我会试着发出一些声音让它进去。 - Lars Tackmann
2
dart:uri已被删除,现在是核心的一部分。https://groups.google.com/a/dartlang.org/forum/#!topic/misc/pHyoawHOhU0 - Max
1
核心文档链接:https://api.dartlang.org/stable/1.16.0/dart-core/Uri-class.html - burkemw3
2
也许在答案中加入一个示例会更好?例如 Uri.encodeComponent(url); - Andrei Lesnitsky

31
Uri.encodeComponent(url); // To encode url
Uri.decodeComponent(encodedUrl); // To decode url

27

我编写了这个小函数,用于将Map转换为URL编码字符串,这可能是你正在寻找的。

String encodeMap(Map data) {
  return data.keys.map((key) => "${Uri.encodeComponent(key)}=${Uri.encodeComponent(data[key])}").join("&");
}

3

1

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';
    

1

在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));

0
这个解决方案对我很有效。构建一个Uri,将Map传递给queryParameters。通过这种方式获取编码数据。
Uri(queryParameters: <Map data>).query;

例如:

Uri(queryParameters: {'key1': val1, 'key2': val2}).query;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接