【问题标题】:Remove `www.` from QUrl in Qt 5.5在 Qt 5.5 中从 QUrl 中删除 `www.`
【发布时间】:2015-11-02 13:40:23
【问题描述】:

所以在我程序的另一部分,我从浏览器中读出了各种 url。 假设我有http://www.example.com 以及http://example.comhttps://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;
}

感谢您的帮助!

【问题讨论】:

  • 别打扰,只需使用QString.replace()www 作为旧值,"" 作为新值
  • 这是否意味着没有优雅的方式来实现我所描述的目标? ;p

标签: c++ qt qurl


【解决方案1】:

没有开箱即用的功能。

我能想到的最佳解决方案是替换网址的 主机部分开头的"www."(如果存在)。

请注意,您不应删除主机中甚至 URL 其余部分中出现的任何其他字符串 "www.",因此我们检查 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]);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-18
    • 2011-09-17
    • 1970-01-01
    • 2014-12-09
    • 2014-06-25
    • 1970-01-01
    • 2016-10-01
    相关资源
    最近更新 更多