Russian Qt Forum
Ноябрь 26, 2024, 01:44
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Пользовательский интерфейс (GUI)
>
QUrl - кодированные и декодированные строки
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: QUrl - кодированные и декодированные строки (Прочитано 8091 раз)
sh123
Гость
QUrl - кодированные и декодированные строки
«
:
Январь 18, 2009, 22:53 »
Есть окошко в котором есть поле для ввода ссылки и кнопочка. Юзер вводит URL и при нажатии на кнопку вызывается bool QDesktopServices::openUrl ( const QUrl & url ), чтобы открыть броузер по введённой ссылке, казалось бы всё просто, но если юзер ввёл URL, который уже в кодированном виде, но начинаются грабли, так как openUrl вызывает QUrl::toEncoded и все % заменяються на %25. Казалось бы можно вызвать QUrl::fromEncoded перед тем, как юзер ввёл такой адрес, но в этом случае если юзер ввёл нормальную незакодированную ссылку то опять начинаются проблемы. Может кто-нибудь сталкивался с такой проблемой?
Записан
Dendy
Гость
Re: QUrl - кодированные и декодированные строки
«
Ответ #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
Гость
Re: QUrl - кодированные и декодированные строки
«
Ответ #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
Гость
Re: QUrl - кодированные и декодированные строки
«
Ответ #3 :
Январь 19, 2009, 14:35 »
Сам с такой проблемой не сталкивался.
Грабли, не грабли. а можно через них переступить:
Ищишь в строке введеной пользователем символ "%", если находишь то делаешь QUrl::fromEncoded. Иначе просто открываешь то, что ввел пользователь.
Возможно есть чтото стандартное, но сейчас нет времени искать...
Записан
Dendy
Гость
Re: QUrl - кодированные и декодированные строки
«
Ответ #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
Гость
Re: QUrl - кодированные и декодированные строки
«
Ответ #5 :
Январь 19, 2009, 16:48 »
Цитата: lex_newton от Январь 19, 2009, 14:35
Сам с такой проблемой не сталкивался.
Грабли, не грабли. а можно через них переступить:
Ищишь в строке введеной пользователем символ "%", если находишь то делаешь QUrl::fromEncoded. Иначе просто открываешь то, что ввел пользователь.
Возможно есть чтото стандартное, но сейчас нет времени искать...
А если у юзера введена некодированная строка
http://somehost.com/lalalala%41456
, то используя твой алгоритм она перекодируется в
http://somehost.com/lalalalaA456
, знак % то допускается в URLе.
Записан
Dendy
Гость
Re: QUrl - кодированные и декодированные строки
«
Ответ #6 :
Январь 19, 2009, 17:05 »
Может быть что-то вроде этого подойдёт:
Код:
QUrl url = QUrl::fromEncoded( urlString );
if ( !url.isValid() )
url.setUrl( urlString );
Записан
sh123
Гость
Re: QUrl - кодированные и декодированные строки
«
Ответ #7 :
Январь 19, 2009, 17:28 »
Мега спасибо, это именно то, что нужно было!!!!
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...