协慌网

登录 贡献 社区

在 JavaScript 中编码 URL?

如何使用 JavaScript 安全地编码 URL,以便将其放入 GET 字符串?

var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;

我假设你需要在第二行编码myUrl变量?

答案

查看内置函数encodeURIComponent(str)encodeURI(str)
在你的情况下,这应该工作:

var myOtherUrl = 
       "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

你有三个选择:

  • escape()不会编码: @*/+

  • encodeURI()不会编码: ~!@#$&*()=:/,;?+'

  • encodeURIComponent()不会编码: ~!*()'

但在你的情况下,如果你想将URL传递给其他页面的GET参数,你应该使用escapeencodeURIComponent ,但不能使用encodeURI

请参阅 Stack Overflow 问题最佳实践:escape 或 encodeURI / encodeURIComponent以供进一步讨论。

坚持使用encodeURIComponent() 。函数encodeURI()不打算编码许多在 URL 中具有语义重要性的字符(例如 “#”,“?” 和 “&”)。不推荐使用escape() ,并且不打算编码 “+” 字符,这些字符将被解释为服务器上的编码空格(并且,正如其他人所指出的那样,不能正确地对非 ASCII 字符进行 URL 编码)。

其他地方有一个很好的解释encodeURI()encodeURIComponent()之间的区别 。如果要对某些内容进行编码以便可以安全地将其作为 URI 的一个组件包含在内(例如,作为查询字符串参数),则需要使用encodeURIComponent()