我有一个文本字段,用户可以添加一个网址,我有一个文本字段,用户可以添加一个网址与QUrl::fromUserInput(),然后它将被放入一个列表。如果我在网址中使用特殊字符,如"http://blöd.de/",它将显示为"http://blöd.de/",但如果我只键入"ö",它将被转换为双关码"http://xn--nda/"。
我试过每一个QUrl::FormattingOptions和每一个QUrl::ParsingMode
qDebug() << QUrl::fromUserInput("blöd.de"); // results in: http://blöd.de
qDebug() << QUrl::fromUserInput("ö"); // results in: http://xn--nda有没有人知道怎么把这个punycode转换回特殊字符?为什么只有当我有一个顶级域名时,它才不会被转换?
发布于 2019-07-10 02:37:26
一些urls显示为Unicode字符,而其他urls显示为双关码的原因是为了防止同形异义词攻击。
决定如何对特定url执行操作的一种方法是通过TLD白名单。在Qt中,您可以使用QUrl::idnWhitelist()和QUrl::setIdnWhitelist(const QStringList &list)查看和编辑白名单。
在您的示例中,.de在白名单中,但.ö不在白名单中。这就是为什么你可以看到行为上的不同。
https://stackoverflow.com/questions/56949795
复制相似问题