"リンク内に二重引用符 ( ) があるサイトを開こうとすると、たとえば、. user.php?name="stackoverflow"切断"するか、Google にリダイレクトされることもあります!? 使用コード:
ShellExecute(0, 'open', PChar('open'), PChar(URL), nil, SW_SHOW) ;
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¶m2=%s';
URL := Format(URL, [
HTTPEncode('"stackoverflow.com"'),
HTTPEncode('hello word!')]);
// output: http://www.user.com/?param1=%22stackoverflow.com%22¶m2=hello+word!