QUrlQuery 类
QUrlQuery 类提供了操作 URL 查询中键值对的方法。 更多信息...
头文件 | #include <QUrlQuery> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Core) target_link_libraries(mytarget PRIVATE Qt6::Core) |
qmake | QT += core |
- 所有成员列表,包括继承的成员
- QUrlQuery 是输入/输出和网络、网络编程 API 和隐式共享类的一部分。
注意: 此类中所有函数都是 可重入的。
公共函数
QUrlQuery() | |
QUrlQuery(const QUrl &url') | |
QUrlQuery(const QString &queryString') | |
QUrlQuery(std::initializer_list<std::pair<QString, QString>> list) | |
QUrlQuery(const QUrlQuery &other) | |
(自 6.5) | QUrlQuery(QUrlQuery &&other) |
~QUrlQuery() | |
void | addQueryItem(const QString &key, const QString &value) |
QStringList | allQueryItemValues(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const |
void | clear() |
bool | hasQueryItem(const QString &key) const |
bool | isEmpty() const |
QString | query(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const |
QString | queryItemValue(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const |
QList<std::pair<QString, QString>> | queryItems(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const |
QChar | queryPairDelimiter() const |
QChar | queryValueDelimiter() const |
void | removeAllQueryItems(const QString &key) |
void | removeQueryItem(const QString &key) |
void | setQuery(const QString &queryString) |
void | setQueryDelimiters(QChar valueDelimiter, QChar pairDelimiter) |
void | setQueryItems(const QList<std::pair<QString, QString>> &query) |
void | swap(QUrlQuery &other) |
QString | toString(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const |
bool | operator!=(const QUrlQuery &other) const |
QUrlQuery & | operator=(const QUrlQuery &other) |
QUrlQuery & | operator=(QUrlQuery &&other) |
bool | operator==(const QUrlQuery &other) const |
静态公有成员
char16_t | defaultQueryPairDelimiter() |
char16_t | defaultQueryValueDelimiter() |
相关非成员
size_t | qHash(const QUrlQuery &key, size_t seed = 0) |
详细描述
它用于解析URL中找到的查询字符串,如下所示
像上述这样的查询字符串用于在URL中传输选项,通常会被解码为多个键值对。上面的例子将包含两个条目,键为“type”和“color”。QUrlQuery也可以从查询的各个部分创建适合用于QUrl::setQuery()()的查询字符串。
解析查询字符串的最常见方法是将其初始化在构造函数中,通过传递它查询字符串。否则,可以使用setQuery()方法设置要解析的查询。该方法还可以用于解析非标准分隔符的查询,在设置它们之后,使用setQueryDelimiters()函数设置。
可以使用query()重新获取编码的查询字符串。这将获取所有内部存储的项目,并使用分隔符对其进行编码。
编码
QUrlQuery中的所有getter方法都支持一个可选的参数类型QUrl::ComponentFormattingOptions,包括query(),它们决定了如何编码数据。除了QUrl::FullyDecoded之外,返回值仍然应被视为百分比编码字符串,因为某些值不能以解码形式表示(如控制字符、无法解码到UTF-8的字节序列)。因此,百分比字符始终表示为字符串“%25”。
QUrlQuery中的所有setter方法和查询方法,如hasQueryItem(),仅接收编码形式。与QUrl不同,没有可选参数可以指定传入的字符串是解码的。如果将不正确编码的字符串传递给setter或查询方法,QUrlQuery将尝试恢复而不是失败。也就是说,此类中的所有函数都将它们的字符串参数解析为似乎已指定QUrl::TolerantMode解码模式。
应用程序代码应努力始终确保适当的编码,不要依赖于TolerantMode解析修复字符串。值得注意的是,所有用户输入必须首先使用QUrl::toPercentEncoding()或类似函数进行百分比编码,然后再传递给此类中的函数。
空格和加号("+")的处理
Web浏览器通常将HTML表单元素中发现的空格编码为加号(+)并将其编码为其百分比值(%2B)。然而,管理URL的互联网规范并不认为空格和加号字符等效。
因此,QUrlQuery永远不会将空格字符编码为"+",也永远不会将"+"解码为空格字符。相反,空格字符将以编码形式显示为“%20”。
为了支持像HTML表单那样的编码,QUrlQuery也永远不会解码"%2B"序列为加号或编码加号。实际上,在键、值或查询字符串中发现的任何"%2B"或"+"序列都将保持原样(除了将"%2b"大写为"%2B"之外)。
完全解析
使用QUrl::FullyDecoded格式化,所有的百分比编码序列将被完全解码,并且“%”字符用来表示自身。应该谨慎使用QUrl::FullyDecoded,因为它可能会导致数据丢失。有关可能丢失的数据信息,请参阅QUrl::FullyDecoded的文档。
此格式化模式仅在处理用户界面中展示的文本,且不希望进行百分比编码的情况下使用。请注意,QUrlQuery设置器和查询方法不支持对应QUrl::DecodedMode解析,所以使用QUrl::FullyDecoded获取键列表可能会在对象中找不到键。
非标准分隔符
默认情况下,QUrlQuery使用等号("=")来分隔键和值,使用与号("&")来分隔键值对。可以通过调用setQueryDelimiters()来更改QUrlQuery用于解析和重建查询的分隔符。
非标准分隔符应从RFC 3986称为“子分隔符”的选项中选择。它们是:
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
不支持使用其他字符,并且可能导致意外行为。QUrlQuery不会验证您提供的是否是有效的分隔符。
也请参阅QUrl.
成员函数文档
QUrlQuery::QUrlQuery()
构建一个空的QUrlQuery对象。之后可以通过调用setQuery()来设置查询,或者可以通过使用addQueryItem()来添加项。
也请参阅setQuery()和addQueryItem。
[显式]
QUrlQuery::QUrlQuery(const QUrl &url)
构建一个QUrlQuery对象,并使用默认的查询分隔符解析URL中找到的url URL的查询字符串。要使用其他分隔符解析查询字符串,您应首先使用setQueryDelimiters()设置它们,然后使用setQuery()设置查询。
也请参阅QUrl::query。
[显式]
QUrlQuery::QUrlQuery(const QString &queryString)
构建一个QUrlQuery对象,并使用默认的查询分隔符解析queryString查询字符串。要使用其他分隔符解析查询字符串,您应首先使用setQueryDelimiters()设置它们,然后使用setQuery()设置查询。
QUrlQuery::QUrlQuery(std::initializer_list<std::pair<QString, QString>> list)
从一个键值对列表list构建一个QUrlQuery对象。
QUrlQuery::QUrlQuery(const QUrlQuery &other)
复制other QUrlQuery对象的全部内容,包括查询分隔符。
[异常,自6.5版起]
QUrlQuery::QUrlQuery(QUrlQuery &&other)
将其他 QUrlQuery 对象的内容,包括查询分隔符,移动到此处。
该函数在 Qt 6.5 中引入。
[noexcept]
QUrlQuery::~QUrlQuery()
销毁此 QUrlQuery 对象。
void QUrlQuery::addQueryItem(const QString &key, const QString &value)
将键值对 key = value 添加到 URL 查询字符串的末尾。此方法不会覆盖可能存在的具有相同键的现有项。
注意: 此方法不像 HTML 表单那样将空格(ASCII 0x20)和加号(+)视为相同的值。如果您需要将空格表示为加号,则请使用实际的加号。
注意: 期望键和值字符串为百分编码形式。
另请参阅 hasQueryItem() 和 queryItemValue()。
QStringList QUrlQuery::allQueryItemValues(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
返回从 URL 中键等于 key 的查询字符串值的列表,使用 encoding 中指定的选项来编码返回值。如果找不到 key 键,则此函数返回空列表。
注意: 期望键为百分编码形式。
另请参阅 queryItemValue() 和 addQueryItem()。
void QUrlQuery::clear()
通过删除当前存储的所有键值对来清空此 QUrlQuery 对象。如果已更改查询分隔符,则此函数将保留它们的更改值。
另请参阅 isEmpty() 和 setQueryDelimiters()。
[static constexpr noexcept]
char16_t QUrlQuery::defaultQueryPairDelimiter()
返回用于分隔键和值对的默认字符,即“&”。
注意: Qt 6 之前,此函数返回 QChar。
另请参阅 setQueryDelimiters(),queryPairDelimiter() 和 defaultQueryValueDelimiter()。
[static constexpr noexcept]
char16_t QUrlQuery::defaultQueryValueDelimiter()
返回在查询中分隔键和值的默认字符,即等号(=)。
注意: Qt 6 之前,此函数返回 QChar。
另请参阅 setQueryDelimiters(),queryValueDelimiter() 和 defaultQueryPairDelimiter()。
bool QUrlQuery::hasQueryItem(const QString &key) const
如果从 URL 中存在查询字符串对,其键等于 key,则返回 true
。
注意: 期望键为百分编码形式。
另请参阅 addQueryItem() 和 queryItemValue()。
bool QUrlQuery::isEmpty() const
如果此 QUrlQuery 对象不包含键值对,则返回 true
,例如在默认构造或解析空查询字符串之后。
QString QUrlQuery::query(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
返回由当前存储在此 QUrlQuery 对象中的键值对以及为该对象选择的查询分隔符重构的查询字符串。键和值使用由 encoding 参数提供的选项进行编码。
对于此函数,唯一模棱两可的分隔符是井号 ("#"),因为在 URL 中它用于将查询字符串与可能跟在后面的片段分开。
返回字符串中键值对的顺序与原始查询中完全相同。
另请参阅 setQuery(),QUrl::setQuery(),QUrl::fragment(),以及 Encoding.
QString QUrlQuery::queryItemValue(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
使用在 encoding 中指定的选项对返回值进行编码,返回与 URL 中键 key 关联的查询值。如果找不到键 key,则此函数返回空字符串。如果您需要区分空值和不存在键,您应该首先使用 hasQueryItem() 检查键的存在性。
如果键 key 多次定义,此函数将返回在查询字符串中或使用 addQueryItem() 添加时的第一个找到的值。
注意: 期望键为百分编码形式。
另请参阅 addQueryItem(),allQueryItemValues(),以及 Encoding.
QList<std::pair<QString, QString>> QUrlQuery::queryItems(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
使用在 encoding 中指定的选项对项目进行编码,返回 URL 的查询字符串,作为键值对的映射。元素的顺序与在查询字符串中找到或使用 setQueryItems() 设置的顺序相同。
另请参阅 setQueryItems() 和 Encoding.
QChar QUrlQuery::queryPairDelimiter() const
返回在 query() 中重构查询字符串或使用 setQuery() 解析时用来分隔键值对的字符。
另请参阅 setQueryDelimiters() 和 queryValueDelimiter。
QChar QUrlQuery::queryValueDelimiter() const
当在 query() 中重建查询字符串或在 setQuery() 中解析时,返回分隔键和值的字符。
另请参阅 setQueryDelimiters() 和 queryPairDelimiter。
void QUrlQuery::removeAllQueryItems(const QString &key)
从 URL 中删除所有键等于 key 的查询字符串对。
注意: 期望键为百分编码形式。
另请参阅 removeQueryItem。
void QUrlQuery::removeQueryItem(const QString &key)
从 URL 中删除键等于 key 的查询字符串对。如果有多个键等于 key 的项,它将删除在查询字符串中按顺序出现的第一个项或通过 addQueryItem() 添加的项。
注意: 期望键为百分编码形式。
另请参阅 removeAllQueryItems。
void QUrlQuery::setQuery(const QString &queryString)
解析 queryString 中的查询字符串,并将内部项设置为找到的值。如果通过 setQueryDelimiters() 指定了任何分隔符,此函数将使用它们而不是默认分隔符来解析字符串。
另请参阅 query。
void QUrlQuery::setQueryDelimiters(QChar valueDelimiter, QChar pairDelimiter)
设置用于在 URL 查询字符串中分隔键和值以及键值对的字符。默认值分隔符是 '=',默认对分隔符是 '&'。
valueDelimiter 用来分隔键和值,而 pairDelimiter 用来分隔键值对。在 query() 返回的编码表示中,键和值的这些分隔字符会被百分号编码。
如果 valueDelimiter 设置为 ',' 且 pairDelimiter 设置为 ';', 则上述查询字符串将表示为:
http://www.example.com/cgi-bin/drawgraph.cgi?type,pie;color,green
注意:不应使用 RFC 3986 所称的“子分隔符”之外的字符。它们是:
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
不支持使用其他字符,可能会导致意外行为。此方法不验证您传入的分隔符是否有效。
另请参阅 queryValueDelimiter() 和 queryPairDelimiter。
void QUrlQuery::setQueryItems(const QList<std::pair<QString, QString>> &query)
将此 QUrlQuery 对象中的项设置为 query。保留 query 中元素的最小顺序。
注意: 此方法不像 HTML 表单那样将空格(ASCII 0x20)和加号(+)视为相同的值。如果您需要将空格表示为加号,则请使用实际的加号。
注意:键和值预期为百分编码形式。
另请参阅queryItems() 和 isEmpty()。
[无异常]
void QUrlQuery::swap(QUrlQuery &other)
交换此 URL 查询实例与 other。此函数非常快,永远不会失败。
QString QUrlQuery::toString(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
将此 QUrlQuery 转换为 QString。可以使用 encoding 指定返回的 URL 字符串编码。
bool QUrlQuery::operator!=(const QUrlQuery &other) const
如果 other 不等于此 QUrlQuery,则返回 true
。否则返回 false
。
另请参阅operator==()。
QUrlQuery &QUrlQuery::operator=(const QUrlQuery &other)
复制 other QUrlQuery 实例的内容,包括查询分隔符。
[无异常]
QUrlQuery &QUrlQuery::operator=(QUrlQuery &&other)
将 other 移动分配到此 QUrlQuery 实例。
bool QUrlQuery::operator==(const QUrlQuery &other) const
如果此对象和 other 对象包含相同的内容、相同的顺序,并使用相同的查询分隔符,则返回 true
。
© 2024 Qt 公司有限公司。在此处包含的文档贡献是各自所有者的版权。此处提供的文档根据自由软件基金会发布的条款,受 GNU 自由文档许可证版本 1.3 的许可。Qt 和相应的标志是芬兰和/或全世界 Qt 公司的商标。所有其他商标均为各自所有者的财产。