Специальные символы в QUrl будут преобразованы в punycode - PullRequest
0 голосов
/ 09 июля 2019

У меня есть текстовое поле, в котором пользователь может добавить 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 обратно в специальный символ? И почему он не конвертируется, только если у меня домен верхнего уровня?

1 Ответ

0 голосов
/ 09 июля 2019

Причина, по которой некоторые URL-адреса отображаются с символами Юникода, а другие - с помощью punnycode, заключается в том, чтобы предотвращать атаки с помощью омографа.

Один из способов решить, как вести себя для определенного URL-адреса, - это использовать белый список TLD.В Qt вы можете просматривать и редактировать белый список, используя QUrl::idnWhitelist() и QUrl::setIdnWhitelist(const QStringList &list).

В вашем примере .de находится в белом списке, а - нет.Вот почему вы можете увидеть разницу в поведении.

...