2015-11-02 11 views
1

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

Теперь я пытаюсь удалить 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

Не беспокоить, просто используйте 'QString.replace()' 'с www' в OldValue и' "" 'как новый один –

+0

Означает ли это, что нет изящного способа выполнить мою описанную цель? ; p –

ответ

3

Нет такой функции, которая предоставляется из коробки.

Лучшее решение, о котором я могу думать, это заменить "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]); 
} 
+0

'http: // www.google.fr' предоставит': // www.google.fr'? –

+1

Нет, поскольку QUrl.host() уже автоматически удаляет схему. –