特别*和!未使用encodeUriComponent
编码的字符答案 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;
...只需添加字符类中的任何其他内容(正则表达式中的[...]
)。 (效率较低,但不太重要。)
但是如果您传递此参数的任何内容都以原始*
或!
失败,我认为它也会因编码而失败。