可能重複:
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位置屬性在重定向之前轉義的東西?
如果您查看[修訂歷史記錄](http://stackoverflow.com/posts/12602289/revisions),您可以看到在編輯時插入了重複的鏈接,因此當您提交你的編輯。時機不佳。 –