某些项目是用get的方法来提交Ajax,后台再对get的方法的值传递过来的值进行解码。比如在提交ajax的url写上/xx?param1=xx¶m=2...
这样很不好,一般,都是使用post方法来提交的。post方法提交Ajax在《【Servlet】在Servlet3.0中利用json+ajax把数据库查询出来的数据推向前台显示,无额外的json解析包》(点击打开链接)与《【Struts2】利用JQuery实现Struts2的Ajax功能》(点击打开链接)已经提到过,这里不再赘述,但是,面对项目中一大堆前任留下来的也好,或者自己就喜爱的get方式ajax,你就应该对传递过去的参数进行处理。否则,如果用户在输入框写入~`!@#$%^&*()_+-={}|[]\:"<>?;‘,./等这些奇奇怪怪的英文符号,就有可能截断提交的url,让你的web工程崩溃。
你在获取用户在表单填写的东西之后,就应该处理好~`!@#$%^&*()_+-={}|[]\:"<>?;‘,./这些奇奇怪怪的英文符号。字符转义是网页开发的一个很严重的问题。以前的输入框少,这个问题还不严重,现在输入框的,用户在网络上面交互多,这个问题就变得越来越严峻。
你还不能像《【JavaScript】某些字符不转义可以导致网页崩溃与涉及转义字符的显示方法》(点击打开链接)所给的方法一样,把~`!@#$%^&*()_+-={}|[]\:"<>?;‘,./这些奇奇怪怪的英文符号写成& amp; & lt;等转义字符,这样,&就更多了,提交的url还是截断了。所以一般就不应该用get的方法提交Ajax的,但是,你可以考虑把这些符号都改成全角。
下面给出仅符号不包括英文,半角转全角的方法:
/* * escapeAjaxString()是在以get方法的ajax提交之前,对被提交的文本作调用 * 防止~!@#$%^&*()等符号使得get方法的ajax地址断裂 */ function escapeAjaxString(txtstring) { var tmp = ""; for (var i = 0; i < txtstring.length; i++) { if (txtstring.charCodeAt(i) == 32) { tmp = tmp + String.fromCharCode(12288); } if ((32 < txtstring.charCodeAt(i) && txtstring.charCodeAt(i) < 48) || (57 < txtstring.charCodeAt(i) && txtstring.charCodeAt(i) < 65) || (90 < txtstring.charCodeAt(i) && txtstring.charCodeAt(i) < 97) || (122 < txtstring.charCodeAt(i) && txtstring.charCodeAt(i) < 127)) { tmp = tmp + String.fromCharCode(txtstring.charCodeAt(i) + 65248); } else { tmp = tmp + String.fromCharCode(txtstring.charCodeAt(i)); } } return tmp; }注意到第二个判断,里面的条件非常多,但也只是一个范围。因为在Ascii码表、Unicode码表中,符号的分布是断裂在不同的区间的。
这里插一句:Unicode码表包含Ascii码表,Ascii码表是Unicode码表的子集,Unicode码表的0-255就是Ascii码表全部,Ascii码表的0-255,顺序还是一样的。
上面算法对传递过来的字符串进行检验:
如果遇到空格,则将其偏移12288位置,变成中文的空格。
如果遇到半角符号,则将其偏移65248个位置,将其变成全角的符号。
如果遇到其它东西,则不偏移。
然后重新构造一个新的字符串,返回。
这就完成了半角符号、空格向全角的转化。Get方法处理Ajax的时候,就会当做一个普通的中文字处理,不会因为出现~`!@#$%^&*()_+-={}|[]\:"<>?;‘,./这些奇奇怪怪的英文符号截断提交的ActionURL的情况!
【JavaScript】使用get方法提交Ajax之前对于某些符号的处理方案
原文:http://blog.csdn.net/yongh701/article/details/44698725