7

"リンク内に二重引用符 ( ) があるサイトを開こうとすると、たとえば、. user.php?name="stackoverflow"切断"するか、Google にリダイレクトされることもあります!? 使用コード:

ShellExecute(0, 'open', PChar('open'), PChar(URL), nil, SW_SHOW) ;
4

1 に答える 1

15

URLを含む完全修飾を使用し、二重引用符 ( ) をに置き換えてhttp://エスケープ/エンコードする必要があります。URL"%22

また、間違ったパラメーターを渡しています。

MSDN を参照してください: ShellExecute を使用して既定の Web ブラウザーを起動する

例:

procedure TForm1.Button1Click(Sender: TObject);
var
  URL: string;
begin
  URL := 'http://www.user.com/?name="stackoverflow"';
  URL := StringReplace(URL, '"', '%22', [rfReplaceAll]);
  ShellExecute(0, 'open', PChar(URL), nil, nil, SW_SHOWNORMAL);
end;

二重引用符だけでなく、常に URL パラメーターをエンコードする必要があります。TIdURI.URLEncode-IdURI単位でIndyを使用できます。from を使用して、 の各パラメータをエンコードする
こともできます。HTTPEncodeHTTPAppURL

とセパレーターもTIdURI.URLEncodeエンコードすることに注意してください。したがって、次のように各パラメーターを個別にエンコードすることをお勧めします。?&HTTPEncode

URL := 'http://www.user.com/?param1=%s&param2=%s';
URL := Format(URL, [
  HTTPEncode('"stackoverflow.com"'),
  HTTPEncode('hello word!')]);
// output: http://www.user.com/?param1=%22stackoverflow.com%22&param2=hello+word!
于 2012-04-17T19:24:42.533 に答える