Flutter/Dart Uri 没有在 URL 中转义冒号“:”

Posted

技术标签:

【中文标题】Flutter/Dart Uri 没有在 URL 中转义冒号“:”【英文标题】:Flutter/Dart Uri not escaping colon ":" in URL 【发布时间】:2019-05-17 15:17:05 【问题描述】:

创建了以下 uri:

final _url = "https://example.com/api/";
final _uri = Uri(path: _url, queryParameters: _params);

http%3A//example.com/api/+params... 中的结果

我已经尝试通过\: 和其他方法进行转义,但没有运气:/

这个问题只有在运行 Uri 时才会出现,我在网上找不到任何资源来解决这个问题。

【问题讨论】:

使用Uri.httpUri.httpsdocs.flutter.io/flutter/dart-core/Uri/Uri.http.htmldocs.flutter.io/flutter/dart-core/Uri/Uri.https.html 只是问一下,你为什么不把我的答案标记为正确的? 我想给他们两个打勾,但这不会让我感到抱歉:/感谢您的帮助! 我相信这是 uri 构造函数代码中的一个错误。文档说“路径段的百分比编码对除未保留字符和以下字符列表之外的所有字符进行编码:!$&'()*+,;=:@.”。由于“:”在列表中,我希望它不会被编码。 api.flutter.dev/flutter/dart-core/Uri/Uri.html 【参考方案1】:

因此,在 Dart 中从 url 字符串创建 URI 的最佳方法是使用 Uri dart 包及其静态方法 httphttps

所以你必须改变你的代码如下:

final _authority = "example.com";
final _path = "/api";
final _params =  "q" : "dart" ;
final _uri =  Uri.https(_authority, _path, _params);

【讨论】:

【参考方案2】:

替换:

final _url = "https://example.com/api/";
final _uri = Uri(path: _url, queryParameters: _params);

与:

final _url = "example.com/api/";
final _uri = Uri.https(path: _url, queryParameters: _params);

【讨论】:

【参考方案3】:

你的意图是

final String _url = "https://example.com/api/";
final Uri _uri = Uri
    .parse(_url)  // parse string
    .replace(queryParameters: _params);  // set params (no need manual escape, Uri do it itself)

【讨论】:

智能方式。如果没有参数,那么只需Uri _uri = Uri.parse(_urlString) 谢谢!这就是我一直在寻找的

以上是关于Flutter/Dart Uri 没有在 URL 中转义冒号“:”的主要内容,如果未能解决你的问题,请参考以下文章

颤振 | Dart:URI的目标不存在

flutter Dart Packages包导入报错:Target of URI doesn‘t exist ‘package:xxxxx‘ 解决方法

如何在 Flutter/Dart 中使用 url 编码的标头和正文发出 HTTP POST 请求

Flutter - dart.ui 没有方法'platformViewRegistry'

是否可以用Dart / Flutter绘制图像?

Flutter / Dart 没有从本地托管的烧瓶 api 返回值