Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/30: Рейтинг темы: голосов - 30, средняя оценка - 4.93
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261

Нормализация URL в C++ Builder

11.04.2013, 12:10. Показов 6655. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вопрос тем, кто хорошо знает Indy.
Можно ли какими-то средствами переконвертировать URL?
К примеру:
google.com/search?q=Hello. или google.com/search?q=Привет.Привет

Русские знаки, пробелы, точки и ряд других символов ведет к ошибке.
Как их конвертировать в нормальный формат?
С Indy или какими-то другими средствами.
Спасибо.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.04.2013, 12:10
Ответы с готовыми решениями:

Открыть URL (там ссылка, которая совершает переход на другой URL) и вытянуть новый URL
Стоит задача по одному URL получить другой Пробовал открывать URL через webbrowser, но это не совсем то, что нужно, в идеале вообще не...

Как из asp получить полный URL и часть URL от вопросительного знака?
Господа подскажите как из asp получить полный URL и часть URL от вопросительного знака. На Javascript это сделать очень просто - ...

Как исправить: Изменил URL, но в адресных строках отображаются станые URL
Раньше были такого вида http://selftrips.ru/2013/01/07/27269 переделал на ...

15
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
11.04.2013, 13:28
Лучший ответ Сообщение было отмечено как решение

Решение

XE2:
C++
1
2
3
4
#include <IdURI.hpp>
// ...
    String url = L"http://google.com/search?q=Привет.Привет";
    ShowMessage(TIdURI::URLEncode(url));
выдаст тебе

http://google.com/search?q=%D0... 0%B5%D1%82, как и положено
4
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261
11.04.2013, 14:58  [ТС]
А если C++ Builder 2009?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33378 / 21502 / 8236
Регистрация: 22.10.2011
Сообщений: 36,899
Записей в блоге: 11
11.04.2013, 15:07
А какая разница? Важно, какая версия Indy, а не какая версия Билдера.
1
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261
11.04.2013, 16:04  [ТС]
Все так же.

Добавлено через 21 секунду
Версия Indy 10

Добавлено через 33 минуты
Так же - это никак =)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.04.2013, 16:33
Через IdHTTP :
C++
1
2
3
String sEncodedURL = IdHTTP1->URL->URLEncode("http://site.ru/report.php?msg=Привет", TEncoding::Default);
 //ShowMessage(sEncodedURL);
 IdHTTP1->Get(sEncodedURL);
IdHTTP Русский запрос!

Но по сути нужно экранировать не весь url целиком, а только проблемную часть ( кириллицу, @ идр )

Добавлено через 2 минуты
C++
1
2
3
#include <IdURI.hpp>
// ...
String url = "http://google.com/search?q=" + TIdURI::URLEncode("Привет.Привет");
Подробнее про ТIdURI есть в книге Архангельского.
0
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261
11.04.2013, 16:40  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
Через IdHTTP :
Код C++
1
2
3
String sEncodedURL = IdHTTP1->URL->URLEncode("http://site.ru/report.php?msg=Привет", TEncoding:efault);
*//ShowMessage(sEncodedURL);
*IdHTTP1->Get(sEncodedURL);
IdHTTP Русский запрос!
Но по сути нужно экранировать не весь url целиком, а только проблемную часть ( кириллицу, @ идр )
Добавлено через 2 минуты
Код C++
1
2
3
#include <IdURI.hpp>
// ...
String url = "http://google.com/search?q=" + TIdURI::URLEncode("Привет.Привет");
Подробнее про ТIdURI есть в книге Архангельского.
Читал... Не работает.
Перегрузки URLEncode() нет, только URLEncode(UnicodeString);
По вашему совету, экранировал. Ошибка: Protocol field is empty.

Добавлено через 1 минуту
Ставлю в начало протокол (для проверки). Русский текст и не думал конвертироваться....
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.04.2013, 16:50
Цитата Сообщение от Neal Посмотреть сообщение
По вашему совету, экранировал. Ошибка: Protocol field is empty.
Мда точно ... там нужно полностью юрл кидать, но если полностью то нормально конвертица в XE3

Code
1
http://google.com/search?q=%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82.%D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82
А если нужно "частично" то через IdHTTP1->URL->ParamsEncode()

Добавлено через 4 минуты
C++
1
String url = "http://google.com/search?q=" + TIdURI::ParamsEncode("Привет.Привет");
RAD2009 тоже должно, ибо помню что там использовал вроде TIdURI;
1
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261
11.04.2013, 16:59  [ТС]
Блиииин... Не работает. Если так.

C++
1
TIdURI::ParamsEncode(Utf8ToAnsi("привет"));
То какое-то крякозябры имеются. Только для кириллицы, каждая буква должна начинаться на %D0 или %D1.
Тут чистый Hex. И слишком большой для "привет".

Добавлено через 5 минут
Ладно, напишу удаленный скрипт, и буду пересылать ему данные Post-запросом.
Всем спасибо!) Если у кого найдется решение, пишите)
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.04.2013, 17:04
Цитата Сообщение от Neal Посмотреть сообщение
C++
1
TIdURI::ParamsEncode(Utf8ToAnsi("привет"));
Блин а при чем тут Utf8ToAnsi ? Ясно дело хрень будет ....
0
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261
11.04.2013, 17:06  [ТС]
У меня есть наработка из другого проекта, но там использовался один русский и английский.
Тут возможно будет использоваться и украинский и еще бог знает какие. И мой метод переопределения вручную не поможет))

Добавлено через 1 минуту
Цитата Сообщение от Avazart Посмотреть сообщение
Блин а при чем тут Utf8ToAnsi ? Ясно дело хрень будет ....
Встречал в интернете такой способ. Но думаю, фигня. А без этого вообще ничего не происходит.
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.04.2013, 17:07
Цитата Сообщение от Neal Посмотреть сообщение
Встречал в интернете такой способ. Но думаю, фигня. А без этого вообще ничего не происходит.
А типа то что тут пишут вообще фигня?
Не нужен никакой UTF-8, все должно и так конвертится.
0
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261
11.04.2013, 17:14  [ТС]
Есть способ конвертировать вручную?
Я знаю, как получить к примеру B0 (к примеру), ну добавить % в начале.
А как определить %D0 или %D1?
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.04.2013, 17:22
Цитата Сообщение от Neal Посмотреть сообщение
А как определить %D0 или %D1?
Смотри таблицы символов ...

Добавлено через 5 минут
А вот посмотрел свой старый проект на RAD2009, там я использовал
C++
1
2
String EncPass = // ...
EncPass= TIdURI::PathEncode(EncPass);
для передачи пароля как параметра.
1
83 / 78 / 14
Регистрация: 14.06.2012
Сообщений: 261
11.04.2013, 17:44  [ТС]
Цитата Сообщение от Avazart Посмотреть сообщение
String EncPass = // ...
EncPass= TIdURI::PathEncode(EncPass);
Вот оно!!!!!!
Спасибо!
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
11.04.2013, 18:27
Значит глюк в версии толи Indy толи Builder так как повторюсь XE3 работает и так.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.04.2013, 18:27
Помогаю со студенческими работами здесь

Сколько можно добавить URL адресов в свою созданную Группу URl?
Добрый день. Подскажите пожалуйста, сколько можно добавить URL адресов в свою созданную Группу URl? На купленной лицензии VS...

Как скрыть параметры URL и передать их методом пост используя Url.Action()
Здравствуйте. У меня в представлении на сайте есть ссылка, которая формируется в методе действии контроллера MyView1 с помощью...

Можно ли с помощью Response.Redirect(url) открыть этот url в другом фрейме?
Можно ли с помощью Response.Redirect(url) открыть этот url в другом фрейме?

Слайдер с генератором url на каждый активный слайд (и с добавлением сгенерированого url в браузерную строку)
Доброго ввремени суток. Я новичёк в програмировании, и неоткажусь от помощи знающих. нужно решыть такой вопрос. Нужен самый простой...

Узнать полный URL. Дата изменения файла по URL
Доброго времени суток, уважаемые форумчане. Долгих лет и славных лет вам, уважаемый UI... Работаю с Indy. Вообщем необходимы некоторые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru