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