You need use a fully qualified URL
including the http://
and escape/encode the URL
by replacing the double-quotes ("
) with %22
.
Also you are passing wrong parameters.
See MSDN: Use ShellExecute to launch the default Web browser
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;
You should always encode the URL parameters, not only double-quotes. You can use Indy with TIdURI.URLEncode
- IdURI
unit.
You could also use HTTPEncode
from the HTTPApp
unit to encode each parameter in the URL
.
Note that TIdURI.URLEncode
will encode the ?
and the &
separators also. so I think it's a better idea to encode each parameter separately with 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!
URLEncode
(forget which unit, and don't have D7 here to check), which will properly handle all values and not just quotes (like spaces,&
, and so forth). It's in IdURI.pas in D2007 (Indy 9). – Are