Я использую метод экранирования CGI для экранирования URL-адреса для тега ссылки href.Без вызова escape () ссылка работает нормально в моем браузере, потому что она достаточно умна, чтобы переводить пробелы как часть URL.
Мой скрипт cgi имеет
print $outhtml->a({href=>$outhtml->escape($wavURL)}, $outhtml->escapeHTML($exportFilename));
где $outhtml
- это объект CGI, а URL-адрес wav - http://localhost/downloads/My File.mp3
. С помощью escape можно вывести:
<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
Я пробовал это без начального 'http://'
ва также необработанный URL, и он ведет себя так же плохо.Я также попытался использовать абсолютный URL без имени хоста, например /downloads/My File.mp3
, но это также ведет себя так же.Я проверил это на chrome и firefox, и оба получили одинаковый результат.
Я также попробовал URI :: Escape, но он сделал то же самое.
Что я делаю не так?