`

ajax中post的escape扩展方法

    博客分类:
  • coos
阅读更多

ajax中post的escape对有些特殊字符无法转换,例如:+ %号,因此需要对其进行扩展,由于ajax提交比较多,需要转换的字符比较多,实时性比较强,所以对应转换效率要求比较高。

以下是经过思考后完全使用正则表达式的方式实现的,代码非常简单,效率应该很高了。

 

Js代码 复制代码
  1. coos.ajax.encodeString = function(str)   
  2. {   
  3.     if (str == null || str == "")   
  4.     {   
  5.         return str;   
  6.     }   
  7.     var value = escape(str);   
  8.     //替换+号为%2B   
  9.     value = value.replace(/\+/g, "%2B");   
  10.     //替换%号为%25如"%u2a2a dfd %u1f1f";替换后为%25u2a2a dfd %25u1f1f   
  11.     value = value.replace(/%u([0-9A-F]{4})/ig,function(word){return escape(word);});   
  12.        
  13.     return value;   
  14. };  
coos.ajax.encodeString = function(str)
{
	if (str == null || str == "")
	{
		return str;
	}
	var value = escape(str);
	//替换+号为%2B
	value = value.replace(/\+/g, "%2B");
	//替换%号为%25如"%u2a2a dfd %u1f1f";替换后为%25u2a2a dfd %25u1f1f
	value = value.replace(/%u([0-9A-F]{4})/ig,function(word){return escape(word);});
	
	return value;
};

 

 

 

以前别人的一个做法,用了while循环substring match等,效率虽然感觉不出来,但看那代码就觉得很不舒服,杀伤了不少脑细胞才理解透彻后改为上面简单的正则表达式方式:

 

Js代码 复制代码
  1. coos.ajax.encodeString = function (str)   
  2. {   
  3.     if (str == null || str == "")   
  4.         return str;   
  5.        
  6.     var ret = "";   
  7.     var value = escape(str);   
  8.     var match, re = /%u([0-9A-F]{4})/i;   
  9.        
  10.     value = value.replace(/\+/g, "%2B");   
  11.        
  12.     while((match = value.match(re)))   
  13.     {   
  14.         ret += value.substring(0, match.index) + escape("%u") + match[1];   
  15.         value = value.substring(match.index+match[0].length);   
  16.     }   
  17.        
  18.     ret += value;   
  19.        
  20.     return ret;   
  21. }  
coos.ajax.encodeString = function (str)
{
	if (str == null || str == "")
		return str;
	
	var ret = "";
	var value = escape(str);
	var match, re = /%u([0-9A-F]{4})/i;
	
	value = value.replace(/\+/g, "%2B");
	
	while((match = value.match(re)))
	{
		ret += value.substring(0, match.index) + escape("%u") + match[1];
		value = value.substring(match.index+match[0].length);
	}
	
	ret += value;
	
	return ret;
}

 

经过测试encodeURIComponent 不对'单引号进行编码对/进行编码
不能满足要求,encodeURI不对+号进行和'单引号进行编码也不能满足要求

下面是测试代码:

Js代码 复制代码
  1. <script type="text/javascript">   
  2.     var str = "a b+x%uacsd中文!@=)(+\\~`/.';'.d";   
  3.     var str1 = encodeURI(str);   
  4.     alert("str1= " + str1);   
  5.   
  6.     var str2 = encodeURIComponent(str);   
  7.     alert("str2= " + str2);   
  8.   
  9.     var value = escape(str);   
  10.     value = value.replace(/\+/g, "%2B");   
  11.     value = value.replace(/%u([0-9A-F]{4})/ig,function(value){return escape(value);});   
  12.     alert("value2= " + value);   
  13.   
  14.     if(str2 == value)   
  15.     {   
  16.         alert(true);   
  17.     }   
  18. </script>  
<script type="text/javascript">
	var str = "a b+x%uacsd中文!@=)(+\\~`/.';'.d";
	var str1 = encodeURI(str);
	alert("str1= " + str1);

	var str2 = encodeURIComponent(str);
	alert("str2= " + str2);

	var value = escape(str);
	value = value.replace(/\+/g, "%2B");
	value = value.replace(/%u([0-9A-F]{4})/ig,function(value){return escape(value);});
	alert("value2= " + value);

	if(str2 == value)
	{
		alert(true);
	}
</script>

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics