我正在使用CGI轉義方法來轉義href鏈接標記的url。 沒有escape()調用,鏈接在我的瀏覽器中正常工作,因爲它足夠聰明,可以將空間翻譯爲URL的一部分。爲什麼我的鏈接URL使用CGI :: escape會讓我的瀏覽器帶我到錯誤的地方?
我的CGI腳本有這個
print $outhtml->a({href=>$outhtml->escape($wavURL)}, $outhtml->escapeHTML($exportFilename));
其中$outhtml
是一個CGI對象和WAV網址是http://localhost/downloads/My File.mp3
隨着逃逸,輸出爲:
<a href="http%3A%2F%2Flocalhost%2Fdownloads%2FMy%20File.mp3">My File</a>
這看起來還好我,但鉻作爲一個相對鏈接,所以當我點擊它或複製鏈接地址,它附加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 ::逃跑,但它也做了同樣的事情。
我在做什麼錯?
我嘗試過了,這工作。但我仍在尋找爲什麼轉義URL的開始不起作用。正如我所說的,不逃避任何事情也適用於我(儘管它會破壞舊版瀏覽器) –