你如何使用JavaScript安全地编码URL?

时间:2015-07-17 07:44:03

标签: javascript

特别*和!未使用encodeUriComponent

编码的字符

1 个答案:

答案 0 :(得分:2)

正如我在评论中所说,您不必在查询字符串中编码 *!。这非常好,例如:http://example.com?foo=bar*!

无论如何,你似乎都有意这样做。如果您愿意,可以,但您不必

如果有必要,你会怎么做:

var param = "bar*!";
param = encodeURIComponent(param)
           .replace(/\*/g, '%2a') // 2a is the %-encoding of *
           .replace(/!/g, '%21'); // 21 is the %-encoding of !
var url = "http://example.com?foo=" + param;

(如果您需要对其他字符进行不必要的编码,您可以像下面这样获取%-encoding值:"*".charCodeAt(0).toString(16)。)

或者实际上,我们可以自动化:

var param = "bar*!";
param = encodeURIComponent(param).replace(/[*!]/g, function(m) {
    return "%" + m.charCodeAt(0).toString(16);
});
var url = "http://example.com?foo=" + param;

...只需添加字符类中的任何其他内容(正则表达式中的[...])。 (效率较低,但不太重要。)

但是如果您传递此参数的任何内容都以原始*!失败,我认为它也会因编码而失败。