0

我有一个文本字段,用户可以在其中添加 URL,我有一个文本字段,用户可以在其中添加 URL,QUrl::fromUserInput()然后将其放入列表中。如果我在 URL 中使用特殊字符,"http://blöd.de/"它将显示为,"http://blöd.de/"但如果我只输入"ö"它将被转换为 punycode "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 转换回特殊字符吗?为什么只有当我拥有顶级域时它才没有转换?

4

1 回答 1

0

一些 url 显示为 Unicode 字符而另一些显示为 punnycode 的原因是为了防止同形异义词攻击。

决定如何处理特定 URL 的一种方法是通过 TLD 白名单。在 Qt 中,您可以使用QUrl::idnWhitelist()和来查看和编辑白名单QUrl::setIdnWhitelist(const QStringList &list)

在您的示例.de中,在白名单中,但不在。这就是为什么你可以看到行为的不同。

于 2019-07-09T18:37:25.623 回答