【JavaScript】使用get方法提交Ajax之前对于某些符号的处理方案

某些项目是用get的方法来提交Ajax,后台再对get的方法的值传递过来的值进行解码。比如在提交ajax的url写上/xx?param1=xx&param=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的情况!

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。