Поэтому в другой части моей программы я считывал различные 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;
}
Спасибо за вашу помощь!
Из коробки нет такой функции.
Лучшее решение, которое я могу придумать, это заменить "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]);
}
Других решений пока нет …