在 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
参数中,您应该使用
escape
或
encodeURIComponent
,而不是
encodeURI
。
请参阅 Stack Overflow 问题 最佳实践:escape,或者 encodeURI / encodeURIComponent 以供进一步讨论。
坚持使用
encodeURIComponent()
。函数
encodeURI()
不会对 URL 中具有语义重要性的许多字符进行编码(例如“#”、“?”和“&”)。
escape()
已弃用,并且不会费心对“+”字符进行编码,这些字符将在服务器上被解释为编码空格(并且,正如其他人指出的那样,它不能正确地对非 ASCII 字符进行 URL 编码)。
在其他地方有一个很好的
解释
encodeURI()
和
encodeURIComponent()
之间的区别。如果您想要对某些内容进行编码,以便可以安全地将其作为 URI 的组件(例如作为查询字符串参数)包含在内,则需要使用
encodeURIComponent()
。