当我尝试在链接中打开任何带双引号("
)的网站时,例如。 user.php?name="stackoverflow"
它只会削减"
,有时会将我重定向到Google!
使用过的代码:
ShellExecute(0, 'open', PChar('open'), PChar(URL), nil, SW_SHOW) ;
答案 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
单元中的HTTPApp
对URL
中的每个参数进行编码。
请注意,TIdURI.URLEncode
也会对?
和&
分隔符进行编码。所以我认为用HTTPEncode
单独编码每个参数是个更好的主意,例如:
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!