【问题标题】:How to prevent JavaScript encoding the query string in a location.replace()? [duplicate]如何防止 JavaScript 在 location.replace() 中对查询字符串进行编码? [复制]
【发布时间】:2012-09-26 12:59:06
【问题描述】:

我已经通过 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 位置属性在重定向之前转义?

【问题讨论】:

    标签: javascript query-string url-encoding location-href


    【解决方案1】:

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

    您可以使用内置的decodeURIComponent 函数来做到这一点。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是否有解码查询字符串的内置方法?
      • @user1561108 查看我的编辑
      • 我已经扩展了我的问题。我之前只编码了一些字符;其他人应该保持不变。出于某种原因,将 url 发送到 window.location 或 location.replace() 等会在重定向之前对所有字符进行编码。
      • “有一个库”与“内置”不同
      猜你喜欢
      • 1970-01-01
      • 2014-01-20
      • 1970-01-01
      • 1970-01-01
      • 2012-08-23
      • 2010-12-15
      • 2011-12-03
      • 2019-08-18
      • 1970-01-01
      相关资源
      最近更新 更多