您需要使用完全合格的URL
包括http://
并转义/编码URL
通过替换双引号 ("
) with %22
.
您还传递了错误的参数。
参见MSDN:使用 ShellExecute 启动默认 Web 浏览器 http://support.microsoft.com/kb/224816
Example:
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 参数进行编码,而不仅仅是双引号。您可以将 Indy 与TIdURI.URLEncode
- IdURI
unit.
你也可以使用HTTPEncode
来自HTTPApp
对每个参数进行编码的单元URL
.
注意TIdURI.URLEncode
将编码?
和&
分隔符也。所以我认为最好对每个参数分别进行编码HTTPEncode
e.g:
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!