1

我注意到,IE7不URLEncode的查詢字符串從JavaScript提取的參數,e.g:如何來urlencode location.search PARAMS在IE7中,使用JavaScript

var qs = location.search; 

在Firefox中,對參數進行編碼。我如何編寫特定於IE的代碼以與FireFox相同的方式對參數進行URL編碼?

例如,在Firefox中,這個查詢字符串:

?val=<script> 

//gets rewritten as: 

?val=%3Cscript%3E 

回答

3

通常情況下,正確的功能,URL編碼,在部分使用的字符串一個URL是encodeURIComponent不要使用escape,這是唯一的JavaScript中過時的非標定製編碼方案。它看起來像URL參數編碼,但不同的處理加號和所有非ASCII字符。把它與標準的URL解碼器放在一起,你會得到錯誤。

但是,你不應該叫encodeURIComponent超過location.search如果它給你喜歡<>壞字符(這不應該出現在URL,但IE瀏覽器允許你輸入),因爲這將增加一倍編碼字符已經正確編碼;例如在地址真實%3C(從用戶是否遵循了正確 -formed鏈接到你的網站)會得到錯誤轉化爲%253C

修復了「不安全」的網址字符,而只留下已編碼的字符是encodeURI功能是什麼;嘗試(在所有瀏覽器上,不需要嗅探)。它很少使用,但可能是你需要的。否則,你正在尋找惱人的正則表達式和十六進制編碼函數替換。

+0

它是'encodeURI'而不是'encodeURL'。 – 2010-02-06 14:32:38

+0

你是對的!我是一個胖手指的傻瓜。 – bobince 2010-02-06 15:22:18

0

可以使用escape功能:

var qs = escape(location.search); 
+1

不要使用'escape',它不支持UTF-8編碼。改爲使用'encodeURIComponent'。 – 2010-02-05 19:01:21

+0

@Andy:感謝分享,我不知道:) – Sarfraz 2010-02-05 21:16:07

相關問題