PySide6.QtCore.QUrlQuery¶
- class QUrlQuery¶
QUrlQuery
类提供了一种操作URL查询中键值对的方式。更多…概要¶
方法¶
def
__init__()
def
addQueryItem()
def
clear()
def
hasQueryItem()
def
isEmpty()
def
__ne__()
def
__eq__()
def
query()
def
queryItemValue()
def
queryItems()
def
setQuery()
def
setQueryItems()
def
swap()
def
toString()
注意
本文档可能包含从C++自动翻译到Python的代码片段。我们始终欢迎对代码片段翻译的贡献。如果您发现翻译问题,您也可以通过在我们的https:/bugreports.qt.io/projects/PYSIDE上创建工单来告知我们。
详细描述¶
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
它用于解析在以下URL中找到的查询字符串:
像上面这样的查询字符串用于在URL中传输选项,通常被解码为多个键值对。上面的查询字符串将在其列表中包含两个条目,键为“type”和“color”。
QUrlQuery
也可以用于从查询的各个组件创建适合在setQuery()
中使用的查询字符串。解析查询字符串的最常见方法是在构造函数中通过传递查询字符串来初始化它。否则,可以使用
setQuery()
方法来设置要解析的查询。该方法还可以用于解析具有非标准分隔符的查询,前提是已经使用setQueryDelimiters()
函数设置了这些分隔符。可以使用
query()
再次获取编码后的查询字符串。这将获取所有内部存储的项目并使用分隔符对字符串进行编码。编码¶
QUrlQuery
中的所有获取方法都支持一个可选的ComponentFormattingOptions
类型的参数,包括query()
,这些参数决定了如何编码相关数据。除了FullyDecoded
之外,返回值仍然必须被视为百分号编码的字符串,因为有些值无法以解码形式表示(如控制字符,无法解码为 UTF-8 的字节序列)。因此,百分号字符总是由字符串“%25”表示。所有的设置方法和查询方法,如
hasQueryItem()
在QUrlQuery
中,只接受编码形式。与QUrl
不同,没有可选参数来指定传递的字符串是解码的。如果传递了编码不当的字符串给设置或查询方法,QUrlQuery
将尝试恢复而不是失败。也就是说,这个类中的所有函数解析它们的字符串参数时,都像是指定了TolerantMode
解码模式。应用程序代码应始终确保正确的编码,而不依赖于TolerantMode解析来修复字符串。特别是,所有用户输入在传递给此类中的函数之前,必须首先使用
toPercentEncoding()
或类似函数进行百分比编码。处理空格和加号(“+”)¶
Web浏览器通常会将HTML表单元素中的空格编码为加号(“+”),并将加号编码为其百分比编码形式(%2B)。然而,管理URL的互联网规范并不认为空格和加号字符是等价的。
因此,
QUrlQuery
从不将空格字符编码为“+”,也从不将“+”解码为空格字符。相反,空格字符将以“%20”的形式进行编码。为了支持像HTML表单那样的编码,
QUrlQuery
也不会将“%2B”序列解码为加号,也不会将加号编码。实际上,在键、值或查询字符串中找到的任何“%2B”或“+”序列都会完全按照写入的方式保留(除了将“%2b”转换为“%2B”的大写形式)。完全解码¶
使用
FullyDecoded
格式化时,所有百分比编码的序列将被完全解码,并且‘%’字符用于表示自身。FullyDecoded
应谨慎使用,因为它可能导致数据丢失。有关可能丢失的数据的信息,请参阅FullyDecoded
的文档。这种格式化模式应仅在处理不希望使用百分比编码的上下文中向用户呈现的文本时使用。请注意,
QUrlQuery
的设置器和查询方法不支持对应的DecodedMode
解析,因此使用FullyDecoded
获取键列表可能会导致在对象中找不到键。非标准分隔符¶
默认情况下,
QUrlQuery
使用等号(“=”)来分隔键和其值,并使用和号(”&”)来分隔键值对。可以通过调用setQueryDelimiters()
来更改QUrlQuery
用于解析和重建查询的分隔符。非标准分隔符应从RFC 3986所称的“子分隔符”中选择。它们是:
sub-delims = "!" / "$" / "" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
不支持使用其他字符,可能会导致意外行为。
QUrlQuery
不会验证您传递的分隔符是否有效。另请参阅
- __init__()¶
构造一个空的
QUrlQuery
对象。之后可以通过调用setQuery()
来设置查询,或者使用addQueryItem()
来添加项目。另请参阅
- __init__(queryString)
- Parameters:
queryString – str
构造一个
QUrlQuery
对象并解析queryString
查询字符串,使用默认的查询分隔符。要使用其他分隔符解析查询字符串,您应该首先使用setQueryDelimiters()
设置它们,然后使用setQuery()
设置查询。- __init__(url)
- Parameters:
url –
QUrl
构造一个
QUrlQuery
对象,并使用默认的查询分隔符解析url
URL中的查询字符串。要使用其他分隔符解析查询字符串,您应首先使用setQueryDelimiters()
设置它们,然后使用setQuery()
设置查询。另请参阅
- __init__(other)
- Parameters:
其他 –
QUrlQuery
复制
other
QUrlQuery
对象的内容,包括查询分隔符。- addQueryItem(key, value)¶
- Parameters:
key – str
value – str
将键值对
key
=value
附加到URL的查询字符串末尾。此方法不会覆盖可能存在的具有相同键的现有项。注意
此方法不会像HTML表单那样将空格(ASCII 0x20)和加号(“+”)视为相同。如果您需要将空格表示为加号,请使用实际的加号。
- allQueryItemValues(key[, encoding=QUrl.PrettyDecoded])¶
- Parameters:
key – str
encoding –
ComponentFormattingOption
的组合
- Return type:
字符串列表
返回URL中键等于
key
的查询字符串值列表,使用encoding
中指定的选项对返回值进行编码。如果未找到键key
,此函数返回一个空列表。- clear()¶
清除此
QUrlQuery
对象,移除当前存储的所有键值对。如果查询分隔符已被更改,此函数将保留其更改后的值。- hasQueryItem(key)¶
- Parameters:
key – str
- Return type:
布尔
如果URL中存在键等于
key
的查询字符串对,则返回true
。- isEmpty()¶
- Return type:
布尔
如果此
QUrlQuery
对象不包含任何键值对,例如在默认构造后或解析空查询字符串后,则返回true
。另请参阅
如果
QUrlQuery
对象rhs
不等于lhs
,则返回true
。否则,返回false
。另请参阅
operator==()
如果
QUrlQuery
对象lhs
和rhs
包含相同的内容,顺序相同,并且使用相同的查询分隔符,则返回true
。- query([encoding=QUrl.PrettyDecoded])¶
- Parameters:
编码 –
ComponentFormattingOption
的组合- Return type:
字符串
返回重构的查询字符串,该字符串由当前存储在此
QUrlQuery
对象中的键值对组成,并由为此对象选择的查询分隔符分隔。键和值使用encoding
参数给定的选项进行编码。对于这个函数,唯一不明确的分隔符是井号(“#”),因为在URL中它用于将查询字符串与可能跟随的片段分开。
返回字符串中键值对的顺序与原始查询中的顺序完全相同。
另请参阅
- queryItemValue(key[, encoding=QUrl.PrettyDecoded])¶
- Parameters:
key – str
encoding –
ComponentFormattingOption
的组合
- Return type:
字符串
返回与URL中键
key
关联的查询值,使用encoding
中指定的选项对返回值进行编码。如果未找到键key
,此函数返回一个空字符串。如果需要区分空值和不存在的键,应首先使用hasQueryItem()
检查键是否存在。如果键
key
被多次定义,此函数将返回找到的第一个,按照它们在查询字符串中出现的顺序或使用addQueryItem()
添加的顺序。- queryItems([encoding=QUrl.PrettyDecoded])¶
- Parameters:
编码 –
ComponentFormattingOption
的组合- Return type:
.std.pairQString,QString 的列表
返回URL的查询字符串,作为键和值的映射,使用
encoding
中指定的选项对项目进行编码。元素的顺序与查询字符串中的顺序或通过setQueryItems()
设置的顺序相同。另请参阅
- queryPairDelimiter()¶
- Return type:
QChar
返回在
query()
中重构查询字符串或在setQuery()
中解析时用于分隔键值对的字符。- queryValueDelimiter()¶
- Return type:
QChar
返回在
query()
中重构查询字符串或在setQuery()
中解析时用于分隔键和值的字符。- removeAllQueryItems(key)¶
- Parameters:
key – str
从URL中移除所有键等于
key
的查询字符串对。- removeQueryItem(key)¶
- Parameters:
key – str
从URL中移除键等于
key
的查询字符串对。如果有多个键等于key
的项,它会移除查询字符串中第一个出现的项或使用addQueryItem()
添加的项。- setQuery(queryString)¶
- Parameters:
queryString – str
解析
queryString
中的查询字符串,并将内部项设置为找到的值。如果已使用setQueryDelimiters()
指定了任何分隔符,此函数将使用它们而不是默认分隔符来解析字符串。另请参阅
- setQueryDelimiters(valueDelimiter, pairDelimiter)¶
- Parameters:
valueDelimiter –
QChar
pairDelimiter –
QChar
警告
本节包含从C++自动翻译到Python的代码片段,可能包含错误。
设置用于在URL的查询字符串中分隔键和值以及键值对之间的字符。默认的值分隔符是‘=’,默认的键值对分隔符是‘&’。
valueDelimiter
将用于分隔键和值,而pairDelimiter
将用于分隔键值对。在查询字符串的键和值的编码表示中出现的这些分隔字符的任何实例,在通过query()
返回时都会被百分号编码。如果
valueDelimiter
设置为 ‘,’ 并且pairDelimiter
是 ‘;’,上面的查询字符串将表示为这样:http://www.example.com/cgi-bin/drawgraph.cgi?type,pie;color,green
注意
非标准分隔符应从RFC 3986所称的“子分隔符”中选择。它们是:
sub-delims = "!" / "$" / "" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
不支持使用其他字符,可能会导致意外行为。此方法不会验证您传递的分隔符是否有效。
- setQueryItems(query)¶
- Parameters:
query – .std.pairQString,QString 的列表
将此
QUrlQuery
对象中的项目设置为query
。query
中元素的顺序将被保留。注意
此方法不会像HTML表单那样将空格(ASCII 0x20)和加号(“+”)视为相同。如果您需要将空格表示为加号,请使用实际的加号。
将此URL查询实例与
other
交换。此函数非常快且永远不会失败。- toString([encoding=QUrl.PrettyDecoded])¶
- Parameters:
编码 –
ComponentFormattingOption
的组合- Return type:
字符串
返回此
QUrlQuery
为QString
。encoding
可用于指定返回值的URL字符串编码。