将空格转换为加号(+)
对0-9,a-z,A-Z之间的字符保持不变
对于所有其他的字符,用这个字符的当前字符集编码在内存中的十六进制格式表示,并在每个字节前加上一个百分号(%)。如字符“+”用%2B表示,字符“=”用%3D表示,字符“&”用%26表示,每个中文字符在内存中占两个字节,字符“中”用%D6%D0表示,字符“国”用%B9%FA表示调对于空格也可以直接使用其十六进制编码方式,即用%20表示,而不是将它转换成加号(+)
说明:
如果确信URL串的特殊字符没有引起使用上的岐义或冲突你也可以对这些字符不进行编码,而是直接传递给服务器。例如,http://www.it315.org/dealregister.html?name=中国&password=123
如果URL串中的特殊字符可能会产生岐义或冲突,则必须对这些特殊字符进行URL编码。例如,服务器会将不编码的“中+国”当作“中国”处理。还例如,当name参数值为“中&国”时,如果不对其中的“&”编码,URL字符串将有如下形式:http://www.it315.org/dealregister.html?name=中&国&password=123,应编码为:http://www.it315.org/dealregister.html?name=中%26国&password=123
http://www.it315.org/example/index.html#section2可改写成http://www.it315.org/example%2Findex.html%23section2
escapeSymbol = function(source) {
//TODO: 之前使用\s来匹配任意空白符
//发现在ie下无法匹配中文全角空格和纵向指标符\v,所以改\s为\f\r\n\t\v以及中文全角空格和英文空格
//但是由于ie本身不支持纵向指标符\v,故去掉对其的匹配,保证各浏览器下效果一致
return String(source).replace(/[#%&+=\/\\\ \ \f\r\n\t]/g, function(all) {
return '%' + (0x100 + all.charCodeAt()).toString(16).substring(1).toUpperCase();
});
};