2012-09-26 49 views
1

可能重複:
JavaScript URL Decode function如何防止JavaScript在location.replace()中編碼查詢字符串?

我在通過我的Django HTML模板印刷的已編碼的URL字符串。當我把它放在一個調用location.replace()的地方時,它會被一些JavaScript損壞,這些JavaScript損壞了已經存在於查詢字符串中的=%,導致後來的URL(在我的域之外)不知道如何處理它。

如何防止JavaScript改變它?

編輯: 例如URL字符串:

'http://destination.com/?name=https%3A%2F%2Fexample.com%2F&nextparam=nextvalue' 

上面穿入location.replace()導致重定向到:

http://destination.com/?name%3Dhttps%253A%252F%252Fexample.com%252Fnextparam=nextvalue 

這顯然是不正確。

該URL的查詢字符串參數中包含一個URL。從Django傳遞的安全編碼字符來自字符串':/'中的一組字符,基本上'http://example.com/'被正確編碼。精細。 '=%&'都是查詢字符串的未觸及部分。

在我編碼的字符串中,在js之外工作(例如在錨標記href中),它鏈接到正確的url。

但是,當我將它放入window.location重定向時,它會轉義查詢字符串中的所有字符,並由於某種原因刪除'&' - 甚至用於在qs中對原始URL參數進行編碼的'%'。檢查源代碼顯示該字符串與上面a標籤中的代碼相同。

是否有阻止JavaScript位置屬性在重定向之前轉義的東西?

+0

如果您查看[修訂歷史記錄](http://stackoverflow.com/posts/12602289/revisions),您可以看到在編輯時插入了重複的鏈接,因此當您提交你的編輯。時機不佳。 –

回答

1

您應該在調用location.replace()之前解碼查詢字符串。

JavaScript沒有用於編碼/解碼字符串的內置方法,但有一個名爲php.js的庫可以幫助您。 See this link用於解碼URL的功能。這個庫得到了廣泛的支持。

+0

是否有解碼查詢字符串的內置方法? – user1561108

+0

@ user1561108查看我的編輯 – Samuel

+0

我已經擴展了我的問題。我只編碼了一些字符;其他人應該保持不動。發送URL到window.location或location.replace()等編碼所有的字符之前重定向出於某種原因。 – user1561108

相關問題