在默认浏览器中打开网页,网址内带双引号 (")

2024-02-27

当我尝试打开任何带有双引号的网站时 (")在链接内,例如。user.php?name="stackoverflow"它只是削减"或者有时它会将我重定向到 Google!? 使用的代码:

ShellExecute(0, 'open', PChar('open'), PChar(URL), nil, SW_SHOW) ;

您需要使用完全合格的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&param2=%s';
URL := Format(URL, [
  HTTPEncode('"stackoverflow.com"'),
  HTTPEncode('hello word!')]);
// output: http://www.user.com/?param1=%22stackoverflow.com%22&param2=hello+word!
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在默认浏览器中打开网页,网址内带双引号 (") 的相关文章

随机推荐