Uri 类支持对用于 URI(您可能称为 URL)的字符串进行编码和解码的函数。这些函数控制 URI 唯一的字符,例如 & 和 =。此类还解析和公开 URI 的组件 — 主机、端口、方案等。
编码和解码完全限定的 URI
encodeFull()和decodeFull()方法用于编码和解码除 URI 中具有特殊含义的字符(例如 /、:、&、#)之外的字符。
例子:
Dart
void main(){
var uri = 'https://example.org/api?foo=some message';
var encoded = Uri.encodeFull(uri);
assert(encoded ==
'https://example.org/api?foo=some%20message');
var decoded = Uri.decodeFull(encoded);
print(uri == decoded);
}
Dart
void main(){
var uri = 'https://example.org/api?foo=some message';
var encoded = Uri.encodeComponent(uri);
assert(encoded ==
'https%3A%2F%2Fexample.org%2Fapi%3Ffoo%3Dsome%20message');
var decoded = Uri.decodeComponent(encoded);
print(uri == decoded);
}
Dart
void main(){
var uri =
Uri.parse('https://example.org:8080/foo/bar#frag');
assert(uri.scheme == 'https');
assert(uri.host == 'example.org');
assert(uri.path == '/foo/bar');
assert(uri.fragment == 'frag');
print(uri.origin == 'https://example.org:8080');
}
Dart
void main(){
var uri = Uri(
scheme: 'https',
host: 'example.org',
path: '/foo/bar',
fragment: 'frag');
print(
uri.toString() == 'https://example.org/foo/bar#frag');
}
输出:
true
编码和解码 URI 组件
要编码和解码在 URI 中具有特殊含义的所有字符串字符,包括(但不限于)/、& 和 :,请使用encodeComponent()和decodeComponent()方法。
例子:
Dart
void main(){
var uri = 'https://example.org/api?foo=some message';
var encoded = Uri.encodeComponent(uri);
assert(encoded ==
'https%3A%2F%2Fexample.org%2Fapi%3Ffoo%3Dsome%20message');
var decoded = Uri.decodeComponent(encoded);
print(uri == decoded);
}
输出:
true
解析 URI
如果您有 URI 对象或 URI字符串,则可以使用 URI 字段(如路径)获取其部分。要从字符串创建 URI,请使用parse() 静态方法。
例子:
Dart
void main(){
var uri =
Uri.parse('https://example.org:8080/foo/bar#frag');
assert(uri.scheme == 'https');
assert(uri.host == 'example.org');
assert(uri.path == '/foo/bar');
assert(uri.fragment == 'frag');
print(uri.origin == 'https://example.org:8080');
}
输出:
true
构建 URI
您可以使用 Uri() 构造函数从各个部分构建 URI
例子:
Dart
void main(){
var uri = Uri(
scheme: 'https',
host: 'example.org',
path: '/foo/bar',
fragment: 'frag');
print(
uri.toString() == 'https://example.org/foo/bar#frag');
}
输出:
true