加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

delphi – 在默认浏览器中打开网页,在url中使用双引号(“)

发布时间:2020-12-15 04:23:29 所属栏目:大数据 来源:网络整理
导读:当我尝试打开链接中有双引号(“)的任何网站时,对于ex.user.php?name =”stackoverflow“它只是削减”或者有时它会将我重定向到Google !? 二手代码: ShellExecute(0,'open',PChar('open'),PChar(URL),nil,SW_SHOW) ; 解决方法 您需要使用包含http://的完全
当我尝试打开链接中有双引号(“)的任何网站时,对于ex.user.php?name =”stackoverflow“它只是削减”或者有时它会将我重定向到Google !?
二手代码:
ShellExecute(0,'open',PChar('open'),PChar(URL),nil,SW_SHOW) ;

解决方法

您需要使用包含http://的完全限定URL,并通过将双引号(“)替换为”来转义/编码URL.

你也传递了错误的参数.

请参阅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,SW_SHOWNORMAL);
end;

您应始终对URL参数进行编码,而不仅仅是双引号.您可以将Indy与TIdURI.URLEncode – IdURI单位一起使用.
您还可以使用HTTPApp单元中的HTTPEncode对URL中的每个参数进行编码.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读