编程语言
831
Uri 类 提供编码和解码字符串用来作为 URI(就是你可能知道的 URL)的函数。这些函数处理 URI 中的特殊字符,比如 & 和 **=**。Uri 类也包含解析和获取 URI 的各个部件的方法——host、port、schema 等等。
编码和解码完全限定的 URI
要编码和解码 URI 中除去那些有特殊意义(比如 /**、:、&、#)之外的字符,使用 **encodeFull() 和 decodeFull() 方法。这些方法对于编码和解码完全限定的 URI 是非常好的,它们会留下 URI 中完整的特殊字符。
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);
注意只有 some 和 message 之间的空格被编码了。
编码和解码 URI 部件
要编码和解码一个字符串在 URI 中有特殊意义的所有字符,包括(但不限于)**/、&** 和 :**,使用 **encodeComponent() 和 decodeComponent 方法。
var uri = 'http://example.org/api?foo=some message'; var encoded = Uri.encodeComponent(uri); assert(encoded == 'http%3A%2F%2Fexample.org%2Fapi%3Ffoo%3Dsome%20message'); var decoded = Uri.decodeComponent(encoded); assert(uri == decoded);
解析 URI
如果你有一个 Uri 对象或者一个 URI 字符串,你可以使用 Uri 的属性获取它的部件比如 path。要从一个字符串创建一个 Uri,使用静态方法 **parse()**:
var uri = Uri.parse('http://example.org:8080/foo/bar#frag'); assert(uri.scheme == 'http'); assert(uri.host == 'example.org'); assert(uri.path == '/foo/bar'); assert(uri.fragment == 'frag'); assert(uri.origin == 'http://example.org:8080');
参见 Uri API 索引 了解所有你可以获取的部件。
构建 URI
你可以使用 Uri() 构造函数从独立的部件构建 URL:
var uri = Uri( scheme: 'http', host: 'example.org', path: '/foo/bar', fragment: 'frag'); assert( uri.toString() == 'http://example.org/foo/bar#frag');