gpt4 book ai didi

perl - 为什么对我的链接 URL 使用 CGI::escape 会使我的浏览器将我带到错误的地方?

转载 作者:行者123 更新时间:2023-12-01 15:50:02 24 4
gpt4 key购买 nike

我正在使用 CGI 转义方法转义 href 链接标记的 url。如果没有 escape() 调用,链接在我的浏览器中工作正常,因为它足够聪明,可以将空格转换为 URL 的一部分。

我的cgi脚本有这个

print $outhtml->a({href=>$outhtml->escape($wavURL)}, $outhtml->escapeHTML($exportFilename));          

其中 $outhtml 是一个 CGI 对象,wav URL 是 http://localhost/downloads/My File.mp3

通过转义,输出是:

<a href="http%3A%2F%2Flocalhost%2Fdownloads%2FMy%20File.mp3">My File</a>

这对我来说没问题,但 chrome 将其视为相对链接,因此当我单击它或复制链接地址时,它会附加 localhost/cgi-bin,给出格式错误的地址,如下所示:

http://localhost/cgi-bin/http%3A%2F%2Flocalhost%2Fdownloads%2FMy%20File.mp3

我也尝试过在原始 URL 中没有前导 'http://' 的情况下,它会产生同样的不良行为。我还尝试使用不带主机名的绝对 URL,例如 /downloads/My File.mp3,但这也具有相同的行为。我已经在 chrome 和 firefox 上对此进行了测试,结果相同。

我也试过 URI::Escape,但它做了同样的事情。

我做错了什么?

最佳答案

您应该只转义 CGI 参数的值而不是整个 URL。例如:

http://localhost/cgi-bin/get_file_by_url.pl?where=http%3A%2F%2Flocalhost%2Fdownloads%2FMy%20File.mp3

where 的值必须被转义。 URI模块可以帮助您。

use URI;
my $myurl = URI->new('http://localhost/downloads/My File.mp3');
print $myurl->as_string, "\n";
# http://localhost/downloads/My%20File.mp3

关于perl - 为什么对我的链接 URL 使用 CGI::escape 会使我的浏览器将我带到错误的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6559204/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com