浏览 4375 次
锁定老帖子 主题:ajax中post的escape扩展方法
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-24
最后修改:2009-07-24
ajax中post的escape对有些特殊字符无法转换,例如:+ %号,因此需要对其进行扩展,由于ajax提交比较多,需要转换的字符比较多,实时性比较强,所以对应转换效率要求比较高。 以下是经过思考后完全使用正则表达式的方式实现的,代码非常简单,效率应该很高了。
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; }
经过测试encodeURIComponent 不对'单引号进行编码对/进行编码 下面是测试代码: <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>
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-07-24
decodeURI()不行吗!!,我记得用decode可以!!
|
|
返回顶楼 | |
发表时间:2009-07-24
kjj 写道 decodeURI()不行吗!!,我记得用decode可以!!
刚查了下文档: encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。 encodeURIComponent 方法 将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。 encodeURIComponent(encodedURIString) 必选的 encodedURIString 参数代表一个已编码的 URI 组件。 说明 encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。因为 encodeURIComponent 方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行编码。 |
|
返回顶楼 | |
发表时间:2009-07-24
经过测试encodeURIComponent 不对'单引号进行编码对/进行编码
不能满足要求,encodeURI不对+号进行和'单引号进行编码也不能满足要求 |
|
返回顶楼 | |