这篇文章主要介绍了 escape 函数解决 js 中 ajax 传递中文出现乱码问题, 是非常实用的技巧, 需要的朋友可以参考下
Javascript 是一种由 Netscape 的 LiveScript 发展而来的原型化继承的基于对象的动态类型的区分大小写的客户端脚本语言,主要目的是为了解决服务器端语言,比如 Perl,遗留的速度问题,为客户提供更流畅的浏览效果。
本文实例讲述了 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、由于取到的参数是 %u4f60%u597d 格式的,没法用常规的 urldecoder.decode() 来进行解码,还好,这世上的牛人够多,在网上直接找到了一个工具类,能实现 javascript 中 escape() 及 unescape() 式的编解码
- <script language="javascript">
- function get(id){return document.getelementbyid(id).value}
- function setting()
- {
- var xmlhttp;
- if(window.activexobject)
- {
- xmlhttp=new activexobject("microsoft.xmlhttp")
- }else{
- xmlhttp=new xmlhttprequest();
- }
- xmlhttp.onreadystatechange=function()
- {
- if(xmlhttp.readystate==4)
- {
- if(xmlhttp.status==200)
- {
- alert("成功!")
- }else{
- alert(xmlhttp.status)
- }
- }
- }
- var url="action.asp教程?action=setting&rnd="+math.random()
- xmlhttp.open("post",url,true)
- var senddate ="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"));
- 2727 xmlhttp.setrequestheader('content-type','application/x-www-form-urlencoded');
- xmlhttp.send(senddate)
- }
- </script>
上面的实例我们中文只用了 escape 函数,语法如下:
定义和用法:
escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。
语法:
escape(string) 参数 描述
string 必需。要被转义或编码的字符串。
返回值:
已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。
说明:
该方法不会对 ascii 字母和数字进行编码,也不会对下面这些 ascii 标点符号进行编码: - _ . ! ~ * '() 。其他所有的字符都会被转义序列替换。
提示和注释:
提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。
注释:ecmascript v3 反对使用该方法,应用使用 decodeuri() 和 decodeuricomponent() 替代它
希望本文所述对大家的 javascript 程序设计有所帮助。
来源: