1

我通过 Django 在我的 HTML 模板中打印了一个已经编码的 URL 字符串。当我将它放在对 location.replace() 的调用中时,它会被一些 JavaScript 破坏,这些 JavaScript 破坏=并且%已经存在于查询字符串中,导致后续 URL(在我的域之外)不知道如何处理它。

如何防止 JavaScript 改变它?

编辑:示例网址字符串:

'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 位置属性转义内容?

4

2 回答 2

1

考虑在使用它调用之前解码查询字符串location.replace()

您可以使用内置decodeURIComponent函数执行此操作。

于 2012-09-26T13:15:15.917 回答
1

您应该在使用它调用之前解码查询字符串location.replace()

JavaScript 没有用于编码/解码字符串的内置方法,但有一个名为 php.js 的库可以为您提供帮助。有关解码 url 的功能,请参阅此链接。该库得到广泛支持。

于 2012-09-26T13:07:55.653 回答