尝试在javascript中编码URI组件的保留字符时,为什么会出现空白的%3字符?

时间:2014-12-30 11:46:19

标签: javascript character-encoding escaping

以下是小提琴中呈现的情况: http://jsfiddle.net/am4ph9ut

function encodeAllCharacters(){
    var result = "%60~!%40%23%24%25%26*()_%2B-%3D%7B%7D%7C%5B%5D%3B%3A'%22%2F.%2C%3C%3E%3F%60";
    result = result.replace(/[!'()*-_.~]/g, function(c) {
        return '%' + c.charCodeAt(0).toString(16);
    });
    return result;
}

这是此页面中解释的fixedEncodeURIComponent方法的简化版本: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent

我不确定为什么在执行%3后每个字符后都会添加regexp

1 个答案:

答案 0 :(得分:0)

你的正则表达式在字符类中使用-(即方括号),这意味着左边的那个字符与-(包括)右边的字符之间的所有字符,例如。 [c-f]将匹配c,d,e,f。

要匹配字符-本身,请使用反斜杠来转义它:

result = result.replace(/[!'()*\-_.~]/g, function(c) {