Класс QUrlQuery
Класс QUrlQuery предоставляет способ манипулирования парами ключ-значение в запросе URL. Подробнее...
| Заголовок: | #include <QUrlQuery> |
| qmake: | QT += core |
| С момента: | Qt 5.0 |
Примечание: Все функции в этом классе являются внутрипоточно безопасными.
Открытые функции
| QUrlQuery() | |
| QUrlQuery(const QUrl &url) | |
| QUrlQuery(const QString &queryString) | |
| QUrlQuery(const 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<QPair<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<QPair<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 |
Статические открытые члены
| QChar | defaultQueryPairDelimiter() |
| QChar | defaultQueryValueDelimiter() |
Связанные не члены
| uint | qHash(const QUrlQuery &key, uint seed = 0) |
Подробное описание
Класс QUrlQuery предоставляет способ манипулирования парами ключ-значение в запросе URL.
Он используется для разбора строк запроса, встречающихся в URL, таких как следующие:
Строки запроса, подобные вышеприведённым, используются для передачи параметров в URL и обычно декодируются в несколько пар ключ-значение. Приведённый выше пример будет содержать два элемента в своём списке с ключами "type" и "color". QUrlQuery также может использоваться для создания строки запроса, подходящей для использования в QUrl::setQuery() из отдельных компонентов запроса.
Наиболее распространённый способ разбора строки запроса — инициализировать его в конструкторе, передав строку запроса. В противном случае можно использовать метод setQuery() для установки запроса, который нужно разобрать. Этот метод также может быть использован для разбора запроса с нестандартными разделителями после их установки с помощью функции setQueryDelimiters().
Закодированную строку запроса можно получить снова с помощью query(). Это сделает кодирование всех внутренних элементов с использованием разделителей.
Кодирование
Все методы-получатели в QUrlQuery поддерживают необязательный параметр типа QUrl::ComponentFormattingOptions, включая query(), которые определяют, как кодировать интересующие данные. За исключением QUrl::FullyDecoded, возвращаемое значение по-прежнему должно рассматриваться как процентно-закодированная строка, поскольку существуют определённые значения, которые нельзя выразить в декодированном виде (например, управляющие символы, последовательности байтов, не подлежащие декодированию в UTF-8). По этой причине символ процента всегда представляется строкой "%25".
Обработка пробелов и знака "+”
Веб-браузеры обычно кодируют пробелы, встречающиеся в элементах HTML FORM, в знак "+" и знаки "+" в их процентно-закодированную форму (%2B). Однако спецификации Интернета, регулирующие URL, не считают пробелы и знак плюс эквивалентными.
По этой причине QUrlQuery никогда не кодирует пробел в "+" и никогда не декодирует "+" в пробел. Вместо этого пробелы будут отображаться как "%20" в закодированном виде.
Для поддержки кодирования, подобного кодированию HTML-форм, QUrlQuery также никогда не декодирует последовательность "%2B" в знак плюс, ни кодирует знак плюс. Фактически, любые последовательности "%2B" или "+" в ключах, значениях или строке запроса остаются точно такими, как написаны (за исключением приведения "%2b" к верхнему регистру "%2B").
Полное декодирование
В режиме форматирования QUrl::FullyDecoded все процентно-закодированные последовательности будут полностью декодированы, и символ '%' используется для представления самого себя. QUrl::FullyDecoded следует использовать с осторожностью, так как это может привести к потере данных. См. документацию QUrl::FullyDecoded для получения информации о потерянных данных.
Этот режим форматирования следует использовать только при работе с текстом, представленным пользователю в контекстах, где процентное кодирование нежелательно. Обратите внимание, что установщики QUrlQuery и методы запроса не поддерживают соответствующий режим разбора QUrl::DecodedMode, поэтому использование QUrl::FullyDecoded для получения списка ключей может привести к тому, что ключи не будут найдены в объекте.
Нестандартные разделители
По умолчанию QUrlQuery использует знак равенства ("=") для разделения ключа и значения и амперсанд ("&") для разделения пар ключ-значение друг от друга. Можно изменить разделители, которые использует QUrlQuery для разбора и реконструкции запроса, вызвав setQueryDelimiters().
Нестандартные разделители должны быть выбраны из среди тех, которые RFC 3986 называет «подразделителями». Это:
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "=" Использование других символов не поддерживается и может привести к неожиданному поведению. QUrlQuery не проверяет, что вы передали допустимый разделитель.
См. также QUrl.
Документация по членам-функциям
QUrlQuery::QUrlQuery()
Создаёт пустой объект QUrlQuery. Запрос можно задать позже, вызвав setQuery() или добавить элементы, используя addQueryItem().
См. также setQuery() и addQueryItem().
QUrlQuery::QUrlQuery(const QUrl &url)
Создаёт объект QUrlQuery и парсит строку запроса, найденную в URL url, используя стандартные разделители запроса. Для парсинга строки запроса с другими разделителями, необходимо сначала установить их, используя setQueryDelimiters(), а затем установить запрос с помощью setQuery().
См. также QUrl::query().
QUrlQuery::QUrlQuery(const QString &queryString)
Создаёт объект QUrlQuery и парсит строку запроса queryString, используя стандартные разделители запроса. Для парсинга строки запроса с другими разделителями, необходимо сначала установить их, используя setQueryDelimiters(), а затем установить запрос с помощью setQuery().
QUrlQuery::QUrlQuery(const QUrlQuery &other)
Копирует содержимое объекта QUrlQuery other, включая разделители запроса.
QUrlQuery::~QUrlQuery()
Уничтожает объект QUrlQuery.
void QUrlQuery::addQueryItem(const QString &key, const QString &value)
Добавляет пару key = value в конец строки запроса URL. Этот метод не перезаписывает существующие элементы с тем же ключом.
Примечание: Этот метод не рассматривает пробелы (ASCII 0x20) и знаки плюса ("+") как одинаковые, как это делают HTML-формы. Если вам нужны пробелы, представленные как знаки плюса, используйте фактические знаки плюса.
См. также hasQueryItem() и queryItemValue().
QStringList QUrlQuery::allQueryItemValues(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
Возвращает список значений строки запроса, ключ которых равен key из URL, используя опции кодирования, заданные в encoding. Если ключ key не найден, функция возвращает пустой список.
См. также queryItemValue() и addQueryItem().
void QUrlQuery::clear()
Очищает объект QUrlQuery, удаляя все пары ключ-значение, которые в нём хранятся. Если разделители запроса были изменены, эта функция сохранит их изменённые значения.
См. также isEmpty() и setQueryDelimiters().
QChar QUrlQuery::defaultQueryPairDelimiter()
Возвращает стандартный символ для разделения пар ключ-значение друг от друга — амперсанд ("&").
См. также setQueryDelimiters(), queryPairDelimiter() и defaultQueryValueDelimiter().
QChar QUrlQuery::defaultQueryValueDelimiter()
Возвращает стандартный символ для разделения ключа и значения в запросе — знак равенства ("=").
См. также setQueryDelimiters(), queryValueDelimiter() и defaultQueryPairDelimiter().
bool QUrlQuery::hasQueryItem(const QString &key) const
Возвращает true, если в URL есть пара ключ-значение, ключ которой равен key.
См. также addQueryItem() и queryItemValue().
bool QUrlQuery::isEmpty() const
Возвращает true, если этот объект QUrlQuery не содержит пар ключ-значение, например, после создания по умолчанию или после парсинга пустой строки запроса.
См. также setQuery() и clear().
QString QUrlQuery::query(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
Возвращает воссозданную строку запроса, сформированную из пар ключ-значение, которые в данный момент хранятся в этом объекте QUrlQuery и разделенные разделителями запроса, выбранными для этого объекта. Ключи и значения закодированы с использованием опций, заданных параметром encoding.
В этой функции единственный неоднозначный разделитель — символ решётки ("#"), так как в URL он используется для разделения строки запроса от фрагмента, который может следовать за ней.
Порядок пар ключ-значение в возвращаемой строке точно такой же, как в исходном запросе.
См. также setQuery(), QUrl::setQuery(), QUrl::fragment() и Кодировка.
QString QUrlQuery::queryItemValue(const QString &key, QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
Возвращает значение запроса, связанное с ключом key из URL, используя опции кодирования, заданные в encoding. Если ключ key не найден, функция возвращает пустую строку. Если вам нужно отличить пустое значение от отсутствующего ключа, сначала проверьте наличие ключа с помощью hasQueryItem().
Если ключ key определён несколько раз, эта функция возвратит первое найденное значение, в порядке их появления в строке запроса или добавления с помощью addQueryItem().
См. также addQueryItem(), allQueryItemValues() и Кодировка.
QList<QPair<QString, QString> > QUrlQuery::queryItems(QUrl::ComponentFormattingOptions encoding = QUrl::PrettyDecoded) const
Возвращает строку запроса URL в виде словаря ключей и значений, используя опции кодирования, заданные в encoding. Порядок элементов совпадает с порядком, в котором они были найдены в строке запроса или заданы с помощью setQueryItems().
См. также setQueryItems() и Кодировка.
QChar QUrlQuery::queryPairDelimiter() const
Возвращает символ, используемый для разделения пар ключ-значение при реконструировании строки запроса в query() или при парсинге в setQuery().
См. также setQueryDelimiters() и queryValueDelimiter().
QChar QUrlQuery::queryValueDelimiter() const
Возвращает символ, используемый для разделения ключа и значения при реконструировании строки запроса в query() или при парсинге в setQuery().
См. также setQueryDelimiters() и queryPairDelimiter().
void QUrlQuery::removeAllQueryItems(const QString &key)
Удаляет все пары строки запроса, ключ которых равен key из URL.
См. также removeQueryItem().
void QUrlQuery::removeQueryItem(const QString &key)
Удаляет пару строки запроса, ключ которой равен key из URL. Если есть несколько элементов с ключом, равным 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<QPair<QString, QString> > &query)
Устанавливает элементы в этом объекте QUrlQuery в query. Порядок элементов в query сохраняется.
Примечание: Этот метод не рассматривает пробелы (ASCII 0x20) и знаки «плюс» («+») как одинаковые, как это делает HTML-форма. Если вам нужны пробелы, представленные как знаки «плюс», используйте фактические знаки «плюс».
См. также 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
Возвращает true если other не равно этому объекту QUrlQuery. В противном случае возвращает false.
См. также operator==().
QUrlQuery &QUrlQuery::operator=(const QUrlQuery &other)
Копирует содержимое объекта other QUrlQuery, включая разделители запроса.
QUrlQuery &QUrlQuery::operator=(QUrlQuery &&other)
Присваивает other этому экземпляру QUrlQuery.
Эта функция была представлена в Qt 5.2.
bool QUrlQuery::operator==(const QUrlQuery &other) const
Возвращает true если этот объект и объект other содержат одинаковое содержимое в том же порядке и используют те же разделители запроса.
Связанные нечленные функции
uint qHash(const QUrlQuery &key, uint seed = 0)
Возвращает значение хэша для key, используя seed для инициализации вычисления.
Эта функция была представлена в Qt 5.6.
© The Qt Company Ltd
Licensed under the GNU Free Documentation License, Version 1.3.
https://doc.qt.io/archives/qt-5.6/qurlquery.html