В статье мы рассмотрим, как извлечь или установить значение параметра URL по его имени в Delphi с помощью класса TIdURI. Несмотря на то, что TIdURI помогает парсить URL, он не предоставляет функциональности для работы с параметрами URL напрямую. Тем не менее, мы можем использовать стандартные классы Delphi для решения этой задачи.
Подтвержденный ответ
Для извлечения параметра URL по имени нам нужно сначала разобрать URL на составляющие, а затем декодировать параметры.
Url := 'https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=delphi+url+parameters+';
Params := TStringList.Create;
try
Params.Delimiter := '&';
Params.StrictDelimiter := true;
Uri := TIdURI.Create(Url);
try
Params.DelimitedText := Uri.Params;
finally
Uri.Free;
end;
for i := 0 to Params.Count -1 do
begin
Params.Strings[i] := StringReplace(Params.Strings[i], '+', ' ', [rfReplaceAll]);
Params.Strings[i] := TIdURI.URLDecode(Params.Strings[i], TIdEncoding.UTF8);
end;
// используйте Params как нужно...
finally
Params.Free;
end;
Чтобы создать новый URL, просто выполните обратный процесс:
Params := TStringList.Create;
try
// заполните Params как нужно...
for i := 0 to Params.Count -1 do
begin
Params.Strings[i] := TIdURI.ParamsEncode(Params.Names[i], TIdEncoding.UTF8) + '=' + TIdURI.ParamsEncode(Params.ValueFromIndex[i], TIdEncoding.UTF8);
Params.Strings[i] := StringReplace(Params.Strings[i], ' ', '+', [rfReplaceAll]);
end;
Params.Delimiter := '&';
Params.StrictDelimiter := true;
Uri := TIdURI.Create('');
try
// заполните другие свойства Uri как нужно...
Uri.Params := Params.DelimitedText;
URL := Uri.URI;
finally
Uri.Free;
end;
finally
Params.Free;
end;
Альтернативный ответ
Вы также можете использовать TURI из единицы System.Net.URLClient. Сначала загрузите строку адреса: TUri.create('http://google.com'). thereafter, you can use MyUri.ParameterByName['param']. It also has URLEncodeURLDecode, AddParameter, DeleteParameter, and Parameter[const I: Integer] (TNameValuePair) properties.
Комментарии
При использовании решения может возникнуть ошибка: [dcc32 Error] Unit2.pas(438): E2003 Undeclared identifier: 'enUtf8'. Это происходит потому, что enUtf8 не объявлен в используемой единице. Добавьте единицу IdGlobal в раздел Uses своего кода, чтобы исправить эту проблему.
В статье рассматривается, как извлечь или установить значение параметра URL по его имени в Delphi с помощью класса TIdURI и стандартных классов Delphi для работы с параметрами URL.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS