Удалите `www.` из QUrl в Qt 5.5

Поэтому в другой части моей программы я считывал различные URL-адреса из моего браузера.
Скажи у меня http://www.example.com так же как http://example.com а также https://example.com, Для браузера эти три URL разные.
Для меня только «базовый» домен (example.com) это важно.

Я сейчас пытаюсь раздеть www из домена, однако, не может быть успешным. Я хотел бы сделать это, используя предоставленную библиотеку QUrl вместо проверки, содержит ли строка www. и удалите это потом.
Как видите, это скорее дизайнерское решение;)

Вот мое текущее приложение.

main.cpp

#include <QApplication>
#include <QDebug>
#include <QUrl>
#include <QList>

int main(int argc, char *argv[])
{
QList<QUrl> urlList;
urlList << QUrl("http://example.com/qwe/whoami/123#123141");

urlList << QUrl("chrome://newtab/");
urlList << QUrl("favorites://");
urlList << QUrl("");

urlList << QUrl("https://www.google.de/");
urlList << QUrl("https://google.de/");
urlList << QUrl("https://www.youtube.com/watch?v=XTPGpBBqwe");

urlList << QUrl("https://youtube.com/watch?v=189273ijadzqiuwejk");
urlList << QUrl("http://raspberrypi.stackexchange.com/questions/10371/whoisthisyo");
urlList << QUrl("https://stackoverflow.com/questions/33478464/alfresco-custom");

urlList << QUrl("http://localhost:3000");
urlList << QUrl("localhost:3000");

for (int i = 0; i < urlList.count(); i++) {
qDebug() << "[" << i+1 << "] " << urlList[i].host();
}return 0;
}

Спасибо за вашу помощь!

1

Решение

Из коробки нет такой функции.

Лучшее решение, которое я могу придумать, это заменить "www." в начале принимающей части URL, если он существует.

Обратите внимание, что вы не должны удалять другие вхождения строки "www." в хосте или даже в остальной части URL, поэтому мы проверяем, если QUrl::host() начинается с "www." а затем удалите эти четыре символа из него.

Также обратите внимание, что технически это меняет имя хоста таким образом, что может привести вас к другому веб-сайту. (Хотя практически каждый веб-сайт должен предоставлять одинаковый контент с или без www. префикс поддомена для удобства использования.) Кроме того, это может привести к совершенно непредвиденным результатам для некоторых особых случаев, например, когда www. это даже не поддомен: домен www.com приведет только com,

QUrl remove_www(QUrl url) {
QString host = url.host();
if (host.startsWith("www."))
host = host.mid(4); // = remove first 4 chars
url.setHost(host);
return url;
}

Затем используйте возвращаемое значение этой функции:

for (int i = 0; i < urlList.count(); i++) {
qDebug() << "[" << i+1 << "] " << remove_www(urlList[i]);
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]