escape函数解决js中ajax传递中文出现乱码问题
本文实例讲述了escape函数解决js中ajax传递中文出现乱码问题,分享给大家供大家参考。具体方法如下:
一、问题描述:
本来网页特效中的escape()是将中文按iso-8859-1字符集进行url编码的,那样通过request.getparameter()是能直接获取到请求参数的,但后来的javascript将escape()换成了unicode字符集编码,如此一来,在jsp教程和servlet中就没法直接拿到请求参数了,具体原因我也不知道。
二、解决办法:
1、首先对中文字符进行两次escape()编码,如要传参数name,值为“你好”,则url的格式为....name=escape(escape("你好")),这样一来,在request.getparameter()就能取到编码后的参数了。
2、由于取到的参数是 %25u4f60%25u597d 格式的,没法用常规的urldecoder.decode()来进行解码,还好,这世上的牛人够多,在网上直接找到了一个工具类,能实现javascript中escape()及unescape()式的编解码
<scriptlanguage="javascript"> functionget(id){returndocument.getelementbyid(id).value} functionsetting() { varxmlhttp; if(window.activexobject) { xmlhttp=newactivexobject("microsoft.xmlhttp") }else{ xmlhttp=newxmlhttprequest(); } xmlhttp.onreadystatechange=function() { if(xmlhttp.readystate==4) { if(xmlhttp.status==200) { alert("成功!") }else{ alert(xmlhttp.status) } } } varurl="action.asp教程?action=setting&rnd="+math.random() xmlhttp.open("post",url,true) varsenddate="title="+escape(get("title"))+"&conn_way="+escape(get("conn_way"))+"&databasename="+escape(get("databasename"))+"&sqlusername="+escape(get("sqlusername"))+"&sqlpassword="+escape(get("sqlpassword"))+"&sqllocalname="+escape(get("sqllocalname"))+"&pg_size="+escape(get("pg_size"))+"&adminid="+escape(get("adminid"))+"&adminpwd="+escape(get("adminpwd")); 2727xmlhttp.setrequestheader('content-type','application/x-www-form-urlencoded'); xmlhttp.send(senddate) } </script>
上面的实例我们中文只用了escape函数,语法如下:
定义和用法:
escape()函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
语法:
escape(string)参数描述
string必需。要被转义或编码的字符串。
返回值:
已编码的string的副本。其中某些字符被替换成了十六进制的转义序列。
说明:
该方法不会对ascii字母和数字进行编码,也不会对下面这些ascii标点符号进行编码:-_.!~*'()。其他所有的字符都会被转义序列替换。
提示和注释:
提示:可以使用unescape()对escape()编码的字符串进行解码。
注释:ecmascriptv3反对使用该方法,应用使用decodeuri()和decodeuricomponent()替代它
希望本文所述对大家的javascript程序设计有所帮助。