Hij*_*asa 6 browser delphi winapi delphi-7
当我尝试在链接中打开任何具有双引号(")的站点时,例如.user.php?name="stackoverflow"它只是削减"或有时它重定向到谷歌!?二手代码:
ShellExecute(0, 'open', PChar('open'), PChar(URL), nil, SW_SHOW) ;
Run Code Online (Sandbox Code Playgroud)
kob*_*bik 13
你需要使用一个完全限定的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;
Run Code Online (Sandbox Code Playgroud)
您应始终对URL参数进行编码,而不仅仅是双引号.你可以使用Indy with TIdURI.URLEncode- IdURIunit.
你也可以使用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!
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15611 次 |
| 最近记录: |