7

当我尝试打开链接中包含双引号 ( ") 的任何站点时,例如。user.php?name="stackoverflow"它只是削减"或有时将我重定向到谷歌!?使用的代码:

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

1 回答 1

15

您需要使用完全限定URL的包括http://和转义/编码URL通过将双引号 ( ")替换为%22.

你也传递了错误的参数。

请参阅 MSDN:使用 ShellExecute 启动默认 Web 浏览器

例子:

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单元一起使用。
您还可以使用HTTPEncodefromHTTPApp单元对URL.

请注意,这也会对 the和分隔符TIdURI.URLEncode进行编码。所以我认为将每个参数分别编码是一个更好的主意,例如:?&HTTPEncode

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!
于 2012-04-17T19:24:42.533 回答