"
リンク内に二重引用符 ( ) があるサイトを開こうとすると、たとえば、. 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 を使用して、 の各パラメータをエンコードする
こともできます。HTTPEncode
HTTPApp
URL
とセパレーターも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!