Russian Qt Forum
Ноябрь 26, 2024, 01:44 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QUrl - кодированные и декодированные строки  (Прочитано 8091 раз)
sh123
Гость
« : Январь 18, 2009, 22:53 »

Есть окошко в котором есть поле для ввода ссылки и кнопочка. Юзер вводит URL и при нажатии на кнопку вызывается bool QDesktopServices::openUrl ( const QUrl & url ), чтобы открыть броузер по введённой ссылке, казалось бы всё просто, но если юзер ввёл URL, который уже в кодированном виде, но начинаются грабли, так как openUrl вызывает QUrl::toEncoded и все % заменяються на %25. Казалось бы можно вызвать QUrl::fromEncoded перед тем, как юзер ввёл такой адрес, но в этом случае если юзер ввёл нормальную незакодированную ссылку то опять начинаются проблемы. Может кто-нибудь сталкивался с такой проблемой?
Записан
Dendy
Гость
« Ответ #1 : Январь 18, 2009, 23:16 »

QUrl::TolerantMode. QUrl will try to correct some common errors in URLs. This mode is useful when processing URLs entered by users.
Записан
sh123
Гость
« Ответ #2 : Январь 19, 2009, 11:19 »

Вот тривиальный пример:

QString host = "http://en.wikipedia.org/wiki/%d0%9f%d1%80%d0%b5%d0%b2%d0%b5%d0%b4";
QUrl url(host, QUrl::TolerantMode);
QDesktopServices::openUrl(url);

Открывает:
http://en.wikipedia.org/wiki/%25d0%259f%25d1%2580%25d0%25b5%25d0%25b2%25d0%25b5%25d0%25b4

похоже что TolerantMode не имеет никакого эффекта так как все % заменяются на %25, но урл уже кодированный.
Записан
lex_newton
Гость
« Ответ #3 : Январь 19, 2009, 14:35 »

Сам с такой проблемой не сталкивался.

Грабли, не грабли. а можно через них переступить:
Ищишь в строке введеной пользователем символ "%", если находишь то делаешь QUrl::fromEncoded. Иначе просто открываешь то, что ввел пользователь.

Возможно есть чтото стандартное, но сейчас нет времени искать...
Записан
Dendy
Гость
« Ответ #4 : Январь 19, 2009, 14:49 »

Или я чего-то недопонимаю или это баг в Qt.

Цитировать
Any occurrences of a percent character "%" not followed by exactly two hexadecimal characters (e.g., "13% coverage.html") will be replaced by "%25".

В примере видим что условие удовлетворяется, то-есть "%d0%b4" должно быть заменено на "д". Тем не менее этого не происходит.
Записан
sh123
Гость
« Ответ #5 : Январь 19, 2009, 16:48 »

Сам с такой проблемой не сталкивался.

Грабли, не грабли. а можно через них переступить:
Ищишь в строке введеной пользователем символ "%", если находишь то делаешь QUrl::fromEncoded. Иначе просто открываешь то, что ввел пользователь.

Возможно есть чтото стандартное, но сейчас нет времени искать...


А если у юзера введена некодированная строка http://somehost.com/lalalala%41456, то используя твой алгоритм она перекодируется в http://somehost.com/lalalalaA456, знак % то допускается в URLе.
Записан
Dendy
Гость
« Ответ #6 : Январь 19, 2009, 17:05 »

Может быть что-то вроде этого подойдёт:

Код:
QUrl url = QUrl::fromEncoded( urlString );
if ( !url.isValid() )
  url.setUrl( urlString );
Записан
sh123
Гость
« Ответ #7 : Январь 19, 2009, 17:28 »

Мега спасибо, это именно то, что нужно было!!!!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 21.