我通过 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 之外工作的编码字符串(例如在 anchor 标记 href 中),此链接到正确的 url。
但是当我将它放入 window.location 时,它会重定向,它会转义查询字符串中的所有字符,并出于某种原因删除“&” - 甚至用于对 qs 中的原始 URL 参数进行编码的“%”。检查源代码显示该字符串与上面 a 标记中的字符串相同。
是否有办法防止 JavaScript 位置属性在重定向之前转义内容?
最佳答案
在调用 location.replace()
之前考虑对查询字符串进行解码。
您可以使用内置 decodeURIComponent
来执行此操作功能。
关于javascript - 如何防止 JavaScript 在 location.replace() 中对查询字符串进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12602289/