简述
QUrl 类提供了一个方便的接口使用 URLs。
它可以解析和构造编码和未编码形式的 URLs。QUrl 也支持国际化域名(IDNs)。
详细描述
最常见的使用QUrl 的方式是通过构造函数来初始化,传递一个 QString 参数。
QUrl url("https://github.com/");
然而,也可以使用 setUrl()。
QUrl url;
url.setUrl("https://github.com/");
也可以逐渐地构造 URL,通过调用 setScheme()、setUserName()、setPassword()、setHost()、setPort()、setPath()、setQuery() 和 setFragment()。一些方便的函数也可供使用:setAuthority() 设置用户名、密码、主机和端口。setUserInfo() 设置用户名和密码。
URLs 可以用两种形式表示:编码或未编码。未编码形式适用于显示给用户,编码形式通常会发送到一个 Web 服务器。例如,未编码的URL "http://bühler.example.com/List of applicants.xml" 将被发送到服务器为 "http://xn--bhler-kva.example.com/List%20of%20applicants.xml" 。
可以使用 toString() 来获取 URL 人类可读的表示。这种表示方法适合以未编码形式将 URL 显示给用户。然而,编码的形式由 toEncoded() 返回,仅供内部使用,传递给 Web 服务器、邮件客户等。两种形式在技术上正确、明确地表示相同的 URL - 事实上,传递任何一种形式给 QUrl 的构造函数或使用 setUrl() 都将产生相同的 QUrl 对象。
QUrl 符合 RFC 3986 (统一资源标识符:通用的语法)中的 URL 规范,包括 RFC 1738 (统一资源定位器)中方案的扩展。如果 QUrl 中的折叠规则符合 RFC 3491 ,它还兼容 file URI specification 来自 freedesktop.org,提供使用 UTF-8(IDN 要求) 本地编码编码的文件名。
RFC 3491 是“Nameprep: A Stringprep Profile for Internationalized Domain Names (IDN)”,描述了如何准备一个国际化域名,包括对一个域名字段进行映射、正规化以及禁止性过滤等等操作。
错误检查
在 URL 解析或使用单独的 setter 函数(例如:setScheme()、setHost() 或 setPath())设置 URL 的组成部分时,QUrl 能够检测许多错误。如果解析或 setter 函数成功,任何先前记录的错误条件将被丢弃。
默认情况下, QUrl 的 setter 函数操作在 QUrl::TolerantMode 解析模式下,这意味着他们接受一些常见错误和不实数据。解析的另一种方式是 QUrl::StrictMode,这适用于进一步检查。详见 QUrl::ParsingMode 描述不同的解析模式。
QUrl 只检查符合规范的 URL。它并不试图验证被处理程序预期的高层协议的 URLs 格式。例如,下面的 URIs 都被 QUrl 认为是有效,即使在使用时他们不合理:</