【问题标题】:Special characters in QUrl will be transformed to punycodeQUrl 中的特殊字符将被转换为 punycode
【发布时间】:2019-07-09 09:46:12
【问题描述】:

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

【问题讨论】:

    标签: qt special-characters punycode qurl


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-20
      相关资源
      最近更新 更多