开发者问题收集

在 JavaScript 中编码 URL

2008-12-02
1956006

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

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

我假设您需要在第二行对 myUrl 变量进行编码?

3个回答

查看内置函数 encodeURIComponent(str) encodeURI(str)
对于您来说,这应该有效:

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

您有三个选项:

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

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

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

但在您的例子中,如果您想将 URL 传递到其他页面的 GET 参数中,您应该使用 escapeencodeURIComponent ,而不是 encodeURI

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

Christian C. Salvadó
2008-12-02

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

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

Mike Brennan
2011-05-29