IE10+, Safari5.17+, Firefox4.0+,Opera12+, Chrome7+ 已经按新标准实现. 所以就没有这个问题了.
今天遇到一个问题: 在微信端url中有一个 ×tamp 在请求的时候 被转成了 X , 后来经过查询得知,奶奶的 标准变了.
[code]
var checkURL = function () {
var list = [ //106
'Á',
'á',
'Â',
'â',
'´',
'Æ',
'æ',
'À',
'à',
'&',
'&',
'Å',
'å',
'Ã',
'ã',
'Ä',
'ä',
'¦',
'Ç',
'ç',
'¸',
'¢',
'©',
'©',
'¤',
'°',
'÷',
'É',
'é',
'Ê',
'ê',
'È',
'è',
'Ð',
'ð',
'Ë',
'ë',
'½',
'¼',
'¾',
'>',
'>',
'Í',
'í',
'Î',
'î',
'¡',
'Ì',
'ì',
'¿',
'Ï',
'ï',
'«',
'<',
'<',
'¯',
'µ',
'·',
' ',
'¬',
'Ñ',
'ñ',
'Ó',
'ó',
'Ô',
'ô',
'Ò',
'ò',
'ª',
'º',
'Ø',
'ø',
'Õ',
'õ',
'Ö',
'ö',
'¶',
'±',
'£',
'"',
'"',
'»',
'®',
'®',
'§',
'­',
'¹',
'²',
'³',
'ß',
'Þ',
'þ',
'×',
'Ú',
'ú',
'Û',
'û',
'Ù',
'ù',
'¨',
'Ü',
'ü',
'Ý',
'ý',
'¥',
'ÿ'
];
return function (url) {
var l = list;
var i = l.length;
var matchIndex;
var current;
var nextchar;
var errors = [];
for (; i--;){
matchIndex = url.indexOf(l[i]);
current = l[i];
if(matchIndex > -1){
if((current === '&' || current === '&') && url.charAt(matchIndex + 4) === ';'){
//如果是 & 或 & 我们就认为是故意要输出 & ,比如是一个调用fixURL方法修正过的URL.里面的& 会被我们替换为 amp;
//所以,我们要跳过它,去检查后面.
continue;
}
nextchar = url.charAt(matchIndex + current.length);
if(!/[a-zA-Z0-9]/.test(nextchar)){
//此处我们只要发现任意一个 ,如 ®后面紧随字符不在 a-z,A-Z,0-9范围内.就算有问题.
//这样处理实际和标准的细节以及浏览器实现有细微差异. 但是本着任何浏览器来跑case,都能发现潜在威胁的原则.和实现复杂度的考虑.
// 我们姑且粗暴的这样处理了. 似乎还不错.
errors.push(current + nextchar);
}
}
}
if(errors.length){
throw Error('contains : \n' + errors.join('\n'));
}
};
}();
[/code]

下一篇:安装JAVA环境-Tomcat+jdk+mysql环境