1

次のような URL があります (例):

https://www.google.com/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=delphi+url+parameters+

パラメータの値を名前 (「sourceid」、「ion」など) で取得/設定する必要があります。これどうやってするの?Delphi には TIdURI クラスがあり、URL の解析には役立ちますが、パラメーターには役立ちません。すべてのパラメーターを単一の文字列 (プロパティ Params) として返します。もちろん、独自のパーサーを作成することもできますが、それは非常に基本的な機能であるため、標準的な方法が必要です (希望します)。TIdURI にそれがないことに驚きました。

4

2 に答える 2

7

最初に 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], enUtf8);
  end;

  // use Params as needed...

finally
  Params.Free;
end;

新しい URL を作成するには、プロセスを逆にします。

Params := TStringList.Create;
try

  // fill Params as needed...

  for i := 0 to Params.Count -1 do
  begin
    Params.Strings[i] := TIdURI.ParamsEncode(Params.Names[i], enUtf8) + '=' + TIdURI.ParamsEncode(Params.ValueFromIndex[i], enUtf8);
    Params.Strings[i] := StringReplace(Params.Strings[i], ' ', '+', [rfReplaceAll]);
  end;

  Params.Delimiter := '&';
  Params.StrictDelimiter := true;

  Uri := TIdURI.Create('');
  try
    // fill other Uri properties as needed...
    Uri.Params := Params.DelimitedText;
    URL := Uri.URI;
  finally
    Uri.Free;
  end;
finally
  Params.Free;
end;
于 2014-10-11T15:14:15.273 に答える
6

System.Net.URLClient ユニットの TURI を使用する

これはレコードです。最初に、アドレス文字列 TUri.create(' http://google.com ') をロードする必要があります。

次に、MyUri.ParameterByName['param'] を使用できます。

また、URLEncode URLDecode、AddParameter、DeleteParameter プロパティ Parameter[const I: Integer] (TNameValuePair) なども可能です。

于 2017-04-05T06:30:20.343 に答える