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

时间:2012-04-14 14:58:11

标签: delphi winapi browser delphi-7

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

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

1 个答案:

答案 0 :(得分:11)

您需要使用包含URL的完全限定http://,并使用URL替换双引号(")来转义/编码%22

你也传递了错误的参数。

请参阅MSDN:Use ShellExecute to launch the default Web browser

示例:

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单位一起使用 您还可以使用HTTPEncode单元中的HTTPAppURL中的每个参数进行编码。

请注意,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!