When I try to open any site that has double-quotes (") inside the link , for ex. user.php?name="stackoverflow" it just cuts " or sometimes it redirects me to Google!?
Used code:
ShellExecute(0, 'open', PChar('open'), PChar(URL), nil, SW_SHOW) ;
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!
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With