简单对比 escape() vs encodeURI() vs encodeURIComponent()

发布:elantion 日期:2018-12-21 阅读:871 评论:0

在我们处理URL字符串时,需要把query的参数转码,例如我们在发送get请求时,附上参数:http://www.example.com?name=jam%3Fs ,服务器收到后就可以把name参数的值正确取出:jam?s

escape() -- 不建议使用

escape()函数是最古老的,对非ASCII码转换得不太好,现在已被删除在标准。它能转换所有字符,除了:* @ - _ + . /

encodeURI() -- 不推荐

由于不能转一些常用的特殊字符(, / ? : @ & = + $ #),这些字符在URI上有特殊意义,现在也很少被使用,如果你的参数里不包含这些特殊字符,你可以直接把整个url作为参数去转码,不会破坏url。

例如:

encodeURI('http://www.example.com?name=小强');
// =>http://www.example.com?name=%E5%B0%8F%E5%BC%BA

encodeURIComponent() -- 推荐使用

encodeURIComponent() 用于转换url的单个部分,例如query的参数,这是最常用也是最推荐使用的方法,它可以转换所有字符,甚至包括:, / ? : @ & = + $ #(除了单引号',它是合法的URI字符)。

常见用法:

// 添加跳转参数
const redirectUrl = encodeURIComponent('http://www.example.com');

const loginUrl = 'http://www.user.com/login?redirect=' + redirectUrl;
// => http://www.user.com/login?redirect=http%3A%2F%2Fwww.example.com