ajax中post的escape对有些特殊字符无法转换,例如:+ %号,因此需要对其进行扩展,由于ajax提交比较多,需要转换的字符比较多,实时性比较强,所以对应转换效率要求比较高。
以下是经过思考后完全使用正则表达式的方式实现的,代码非常简单,效率应该很高了。
- coos.ajax.encodeString = function(str)
- {
-
if (str == null || str == "")
- {
-
return str;
- }
-
var value = escape(str);
-
-
value = value.replace(/\+/g, "%2B");
-
-
value = value.replace(/%u([0-9A-F]{4})/ig,function(word){return escape(word);});
-
-
return value;
- };
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等,效率虽然感觉不出来,但看那代码就觉得很不舒服,杀伤了不少脑细胞才理解透彻后改为上面简单的正则表达式方式:
- 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;
- }
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不对+号进行和'单引号进行编码也不能满足要求
下面是测试代码:
- <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>
<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>
分享到:
相关推荐
AJAX POST与get提交数据的差别,喜欢了解详细内容的朋友可以下载学习!
Ajax的post方法的使用,Ajax的post方法的使用,在http协议中还有,get、put、head、和delete
Ajax中Get请求和Post请求的区别 简单例子 何时使用Get请求,何时使用Post请求
Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件 Ajax扩展控件
ajax中使用javascript的send方法post参数。当用set方法是会出现中午乱码的问题,该文档说的post方法很好的解决了该问题,具体用法见文档
扩展jquery的ajax方法,可以处理一些ajax请求的共通问题,比如ajax请求出错之后跳转的问题。
最近做项目遇到一个需求,需要通过Ajax的post请求下载文件,把实现代码分享给大家。
封装jquery ajax方法,方便调用,避免在代码中频繁使用 $.ajax({ type: 'GET', url: url, ...... )}; 统一调用公共方法即可,区分同步异步,get post!希望对大家有帮助
Ajax使用POST提交中文乱码问题.docx
在ajax中使用post方法,用常规的参数格式:param1=a1¶m2=a2 ,当参数长度过长时,依然提交不成功。比如我们经常这样写一个ajax的post请求: $.ajax({ type: "post", // post or get contentType:"application...
chrome扩展插件获取ajax请求记录
在ASP开发中,当文件本框太短输入不了太多内容时,可以利用AJAX控件进行文本框扩展
jQuery ajax、post、get、json格式传递数据例子 jQuery ajax、post、get、json格式传递数据例子
php+Ajax解决了post与get中文乱码的问题 后台页面可以结合mysql使用,以达到相应目的
ajax跨域post请求,spring例子。
Ajax中POST和GET的区别
学习ajax技术的时候,很多同学对于ajax中get与post请求总是疑问不解
Java 模拟Ajax POST GET 提交代码,实测很好用。
Django中使用ajax post向后台传送数据时403 Forbidden (CSRF token missing or incorrect.):的解决办法
防止页面url缓存中ajax中post请求的处理方法 一般我们在开发中经常会用到Ajax请求,异步发送请求,然后获取我们想要的数据,在Ajax中使用Get请求数据不会有页面缓存的问题,而使用POST请求可是有时候页面会缓存...