Dart 中的 urlencoding

问题描述 投票:0回答:8

Dart 中有进行 urlencoding 的函数吗?我正在使用 XMLHttpRequest 对象进行 AJAX 调用,并且需要对 url 进行 url 编码。

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

urlencode dart
8个回答
87
投票
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


38
投票

更新:现在在Dart Uri 类

中支持编码/解码 URI

Dart 的 URI 代码放置在一个名为 dart:uri 的单独库中(因此可以在

dart:html
dart:io
之间共享)。看起来它目前不包含
urlencode
函数,因此目前最好的选择可能是使用 this JavaScript 的
encodeUriComponent
的 Dart 实现。


28
投票
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
投票

我认为还没有。查看 http://unpythonic.blogspot.com/2011/11/oauth20-and-jsonp-with-dartin-web.html 和encodeComponent 方法。

注意,它也缺少一些字符,需要扩展。 Dart 确实应该内置此功能并且易于访问。事实上可能有,但我没有找到。


0
投票

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

0
投票

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

0
投票

这个解决方案对我来说效果很好。构建一个 Uri,将 Map 传递给 queryParameters。通过

获取编码数据
Uri(queryParameters: <Map data>).query;

例如:

Uri(queryParameters: {'key1': val1, 'key2': val2}).query;
© www.soinside.com 2019 - 2024. All rights reserved.