ajax+php应用的乱码问题分析与解决

合集下载

php各种应用乱码问题的解决方法

php各种应用乱码问题的解决方法

php各种应用乱码问题的解决方法php各种应用乱码问题的解决方法在使用php的时候可能会出现各种乱码问题,那么这个时候我们要分清楚情况一一解决问题了。

下面店铺为大家整理了php各种应用乱码问题的解决方法,希望能帮到大家!1) 使用标签设置页面编码这个标签的作用是声明客户端的浏览器用什么字符集编码显示该页面,xxx 可以为 GB2312、GBK、UTF-8(和 MySQL 不同,MySQL 是UTF8)等等。

因此,大部分页面可以采用这种方式来告诉浏览器显示这个页面的时候采用什么编码,这样才不会造成编码错误而产生乱码。

但是有的时候我们会发现有了这句还是不行,不管xxx 是哪一种,浏览器采用的始终都是一种编码,这个情况我后面会谈到。

请注意,是属于 HTML 信息的,仅仅是一个声明,仅表明服务器已经把 HTML 信息传到了浏览器。

2) header("content-type:text/html; charset=xxx");这个函数header() 的作用是把括号里面的信息发到http 标头。

如果括号里面的内容为文中所说那样,那作用和标签基本相同,大家对照第一个看发现字符都差不多的。

但是不同的是如果有这段函数,浏览器就会永远采用你所要求的xxx 编码,绝对不会不听话,因此这个函数是很有用的。

为什么会这样呢?那就得说说http 标头和HTML 信息的差别了:http 标头是服务器以 http 协议传送 HTML 信息到浏览器前所送出的字串。

而标签是属于 HTML 信息的,所以 header() 发送的内容先到达浏览器,通俗点就是header() 的优先级高于(不知道可不可以这样讲)。

假如一个php 页面既有header("content-type:text/html;charset=xxx"),又有,浏览器就只认前者http 标头而不认 meta 了。

当然这个函数只能在 php 页面内使用。

AJAX提交中文乱码解决

AJAX提交中文乱码解决

以下是我的AJAX中文乱码的解决方案:客户端对url进行两次转码:(str可能是中文)Js代码1....2.var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+new Date().getTime();3.url = encodeURI(url);4.url = encodeURI(url);5....服务器段对参数值进行解码:Java代码1....2.String word = request.getParameter("word");3.word = .URLDecoder.decode(word,"UTF-8");还可以利用js进行HEX加密,java解密.怎么不能删除留言啊,一不小心点错了,又要被扣分..java_mike 写道以下是我的AJAX中文乱码的解决方案:客户端对url进行两次转码:(str可能是中文)Js代码1....2.var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+new Date().getTime();3.url = encodeURI(url);4.url = encodeURI(url);5....服务器段对参数值进行解码:Java代码1....2.String word = request.getParameter("word");3.word = .URLDecoder.decode(word,"UTF-8");4....java_mike 写道我也不是很清楚,一次不行!request.getParameter做的怪。

要是使用struts2的自动类型转换就不用encodeURI两次了java_mike 写道以下是我的AJAX中文乱码的解决方案:客户端对url进行两次转码:(str可能是中文)Js代码1....2.var url = 'policy.do?method=searchSuggest&word=' + str+"&now="+new Date().getTime();3.url = encodeURI(url);4.url = encodeURI(url);5....服务器段对参数值进行解码:Java代码1....2.String word = request.getParameter("word");3.word = .URLDecoder.decode(word,"UTF-8");4....String word = request.getParameter("word");word = .URLDecoder.decode(word,"UTF-8");其实这一步是可以简化的。

Aja乱码解决方案

Aja乱码解决方案

Ajax乱码解决方案页面端:xxert title hereAjax:function veryfy(){//乱码问题解决://1.页面端发送的数据采用encodeURI,encodeURI($(“#username”).val()),服务器端采用newString(str.getBytes(“iso8859-1”,”utf-8”));//2.页面端发送的数据采用两次encodeURI,encodeUR I(encodeURI($(“#username”).val())),服务器端URLDecoder.decode(str,”utf-8”);$.get(“AjaxSeverlet?name=“ + encodeURI($(“#username”).val()), null, function(data){ $(“#msg”).(data);});}服务器端:public void doPost(ServletRequest request, ServletResponse response)throws ServletException, IOException {request.setCharacterEncoding(“gb2312”);response.setHeader(“charset”,”gb2312”); //设置返回页面的头 meta 信息response.setContentType(“text/;charset=gb2312”); //设置输出的文档类型// 以上内容在PrintWriter 声明前设置,杜绝乱码PrintWriter out=response.getWriter();//接收参数实例:(Ajax页面端到服务器端)String s = request.getParameter(“name”);s = new String(s.getBytes(“iso-8859-1”), “utf-8”);System.out.println(s);//服务器端到页面端:// out.print(“Ajax乱码解决”); //直接输出中文/xx从数据库中取中文数据x/SqlTools st = new SqlTools();ResultSet rs = st.getResultSet(“select seller from orders where orderid = 1”);String dbs = ““;try {if(rs.next()) {dbs = rs.getString(“seller”); }} catch (SQLException e) {// TODO Auto-generated catch block e.printStackTrace();}out.print(dbs);}。

Ajax返回值乱码

Ajax返回值乱码

2010-08-27ajax返回值中有中文存在的乱码现象文章分类:Web前端ajax返回值中有中文存在的乱码现象,解决就加入下面一行代码即可response.setContentType("text/html;charset=UTF-8");我在网上找遍了解决乱码问题资料,可没有一个能行的通,无奈只好自己研究!其实解决的方法很简单,具体如下:将客户端文件的编码设置为GB2312,如下面代码所示:Html代码1.<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />在发送的URL地址中的查询字符串或者是使用POST方式发送的请求内容不要使用escape函数进行编码,切记!在服务器端的jsp文件也设置为gb2312编码格式,如下面代码所示:jsp 代码1.或者设置response的头,如下面代码所示:java 代码1.response.setHeader("Content-Type","text/html; charset=gb2312");两者原理是一样的。

最着关键的是在获取参数时应该对获取字符串进行重新编码,如下面代码所示:java 代码1.String username = new String(request.getParameter("username").getBytes("ISO8859_1"),"GB2312");其中,username为接收的参数。

直接使用out.print(username);就可以将中文返回给客户端,在客户端直接使用xmlHttp.responseText属性就可以直接使用返回的中文了!附件中我测试用的一个小例子,在tomcat6.0和resin2.1.8中通过测试!其实,还有一个一劳永逸的解决方案,就是添加一个过滤器。

jquery-ajax中文乱码

jquery-ajax中文乱码

结论:jquery 1.3.2 ajax对编码问题进行过部分(见后面补充1 )处理,解决方案以jsp 为例子:ajax提交数据给jsp:ajax所在页面无任何要求,jsp页面需作两方面处理。

1.<%@page contentType="application/json" pageEncoding="UTF-8"%>或<%@page contentType="application/json" pageEncoding="gb2312"%>2.处理request.setCharacterEncoding("UTF-8")详细说明:之所以会乱码,原因很简单,两个人对话的时候,a说中文,b用英文接受,于是乎乱码矣!所以当出现乱码搞清楚谁是a谁是b很重要,然后a说话的时候让b知道应该用什么语言接收,或者b以固定的方式接收,a用b接收的语言去说,这样就万事ok了。

所以下面分成两部分去分析。

一个是ajax单纯获取网页信息的情况,一个是ajax单纯往jsp等提交数据的情况,细的来说,这里种情况有分两种情况即post和getajax单纯抓取网页a:请求的页面,b:jquery ajax这里为什么a是请求的页面,而b是jquery ajax呢?虽然是ajax向页面要东西,但是也可以理解为a(页面)要告诉ajax的内容是什么,于是乎a说,我告诉你b(jquery ajax),我的内容是......并且内容的语言是gb2312的,你来接受吧。

于是b就根据他的编码格式接收了a的内容,于是就没乱码了。

看一下下面的表格首先说明,上面说的页面编码,是指文件字符编码,而不是html里面<meta>标签内的charset=gb2312。

根据以上数据显示:ajax抓去网页的时候,乱码问题与当前页面(ajax所在页面)无关。

PHP乱码问题,UTF-8(乱码)

PHP乱码问题,UTF-8(乱码)

PHP乱码问题,UTF-8(乱码)⼀.HTML页⾯转UTF-8编码问题1.在head后,title前加⼊⼀⾏:<meta http-equiv='Content-Type' content='text/html; charset=utf-8' />顺序不能错,⼀定要在显⽰的标题有可能是乱码!2.html⽂件编码问题:点击编辑器的菜单:“⽂件”->“另存为”,可以看到当前⽂件的编码,确保⽂件编码为:UTF-8,如果是ANSI,需要将编码改成:UTF-8。

3.HTML⽂件头BOM问题:将⽂件从其他的编码转换成UTF-8编码时,有时候会在⽂件的最开始加上⼀个BOM标签,在个BOM标签可能会导致浏览器在显⽰中⽂的时候出现乱码。

删除这个BOM标签的⽅法:1.可以⽤Dreamweaver打开⽂件,并重新保存,即可以去除BOM标签!2.可以⽤EditPlus打开⽂件,并在菜单“⾸选项”->“⽂件”->"UTF-8标识",设置为:“总是删除签名”,然后保存⽂件,即可以去除BOM标签!4.WEB服务器UTF-8编码问题:如果你按以上所列的步骤做了,还是有中⽂乱码问题,请检查你的所使⽤的WEB服务器的编码问题如果你使⽤的是Apache,请将配置⽂件⾥的:charset 设成:utf-8(这⾥仅列出⽅法,具体格式请参考apache的配置⽂件) 如果你使⽤的是Nginx,请将nginx.conf⾥的:charset 设成 utf-8,具体找到 "charset gb2312;"或者类似的语句,改成:“charset utf-8;”。

⼆.PHP页⾯转UTF-8编码问题1.在代码开始出加⼊⼀⾏:header("Content-Type: text/html;charset=utf-8");2.PHP⽂件编码问题点击编辑器的菜单:“⽂件”->“另存为”,可以看到当前⽂件的编码,确保⽂件编码为:UTF-8,如果是ANSI,需要将编码改成:UTF-8。

PHP中文乱码解决总结

PHP中文乱码解决总结

关于PHP和MySQL出现乱码的解决办法最近几天一直在做贴吧的小项目,跟着十八老师的视频学着,中间也遇到不少问题,我查了不少资料最后都一一解决了。

下面详细分类说明各种乱码的处理方法。

简单地讲乱码的产生和各个环节里面设置的编码类型不匹配有关,这里的乱码主要都是指的中文显示的乱码。

(下面没有特指都是说中文显示乱码)。

我先根据发生乱码的位置来划分。

如果是需要快速查找解决方法的可以直接根据错误位置来查阅本文(根据编号快速查找)。

1.网页显示中文乱码。

2.PHPmyadmin中显示乱码。

3.控制台显示中文乱码。

如果是想详细了解各种情况的童鞋可以耐心阅读本文。

1.第一种在一般网页页面上显示中文出现乱码。

这个主要要改一下页面显示编码设置,如果是PHP文件,则在其中加上一句:header("Content-Type: text/html; charset=utf-8");并且要注意保存PHP文件的时候选择编码为utf8.如图所示在你需要显示的PHP后缀的页面中加上就可以,当然一般来说如果是比较多页面都要设置,一个个去添加很麻烦,就在初始化文件里面最后添加就可以加载到所有需要的文件了。

如果是静态页面(求别喷,很可能有静态页面的说),在页面<head></head>标签之间加上一句:<meta charset="utf-8">。

改完后页面的显示中文就能正常。

Utf8编码格式和gbk格式都是目前中文网站显示所用的编码,所以将charset改为utf即可。

2.第二种在MySQL图形化界面中文数据的显示。

在如PHPmyadmin里面也有可能出现中文乱码。

前面也说了要把PHP文件编码保存为utf8,所以相对应的MySQL的相关字符集的设置也要改成utf8;这里有几种方式可以供选择。

第一种治标不治本。

在需要进行数据库操作的PHP文件里,加上下面几句:mysql_query('set character_set_client = utf8');//设置client的字符集为utf8mysql_query('set character_set_connection = GBK');//s设置连接字符集为gbkmysql_query('set character_set_results = utf8');//设置最后结果的字符集为utf8当然作为程序员来说,如果一个添加留言的页面需要录入中文,一个修改留言的页面也需要中文的录入数据库,每个文件里都必须加,一个个写也是很烦躁的事,建议还是写到初始化文件(比如我写的init.php)里面,其他文件都会自行加载。

AJAX乱码解决大全

AJAX乱码解决大全

1、编码编码比较常用的有: UTF-8, GBK, GB2312, ISO-8859-1,除了 iso-8859-1之外的其它三个编码都能很好的支持中文,但它们都兼容 ISO-8859-1的编码(就是说无论编码怎么改变,只要是 ISO-8859-1中的字符,永远不会出现乱码)。

这四种编码中, GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码;GBK 是 GB2312的扩展 ,除了兼容GB2312外,它还能显示繁体中文,还有日文的假名;而 UTF-8虽然也支持中文,但却与GB码不兼容(编码值不同)。

UTF-8使用的是可变长的 UNICODE编码,编码可能是 1位 16进制(即 ISO-8859-1中的字符,其编码也是相同的)也有可能是 2位或 3位的 16进制。

UTF-8的优点是:1、与CPU字节顺序无关 , 可以在不同平台之间交流。

2、容错能力高 , 任何一个字节损坏后 , 最多只会导致一个编码码位损失 , 不会链锁错误 (如 GB 码错一个字节就会整行乱码 ),所以在国际化处理中基本都是建议使用 UTF-8作为编码。

2、文件的编码文件编码最常使用的有两种:ANSI和UTF-8,光看名字估计你都可以猜到了,ANSI就是我们保存文件时使用的默认编码,而UTF-8则需自己设置。

对于编码的改变,我使用的工具是NOTEPAD和ECLIPSE,NOTEPAD使用最简单,只要打开文件后在另存为中选择相应的编码就行了,而且它对编码的支持非常好;而在ECLIPSE中,只要稍微设置一下就行了,打开首选项,然后选择:常规->内容类型(ContentType),在右边选中你想改变保存编码的文件类型,然后在下方的缺省编码中改变其值,最后点击更新(UPDATE)按钮即可。

而在其它的编辑器中,默认保存的内容都是GB2312或者GBK(NOTEPAD中对应ANSI).而根据前面所说的UTF-8和GBK,GB2312等的编码值是不同的这一点,可以知道,如果文件使用了UTF-8,那么字符编码就必须使用UTF-8,否则编码值的不同就可能造成乱码。

AJAX中文乱码 问题分为两大类

AJAX中文乱码 问题分为两大类
解决办法:在服务器指定发送数据的格式:
在jsp文件中:
response.setContentType("text/text;charset=UTF-8");//返回的是txt文本文件
或是
response.setContentType("text/xml;charset=UTF-8");//返回的xml文件
如果上述方法仍然解决不了乱码问题,那你尝试一下把jsp,htm,java文件用UTF-8编码格式保存.
总之:前后台数据交互都采用utf-8编码就行了.
服务器端:
String name = request.getParameter("name");
name = .URLDecoder.decode(name, "UTF-8");
2)返回来的responseText或responseXML的值中含有中文是乱码
原因:AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的,如果服务器段发送的数据不是UTF-8的格式,那么接收responseText或responseXML的值有可能为乱码。
总结:1)ajax提交数据的格式默认为utf-8,利用javascript的提供的escape()或encodeURI()方法.在服务器端接收的时候要使用.URLDecoder.decode("","UTF-8")方法进行解码.
2)xtmlhttp 返回的数据默认的字符编码是utf-8,所以服务器要向客户端发送数据的时候,也要采用utf-8编码
功能和encodeURI方法类似。
/********************************************/

Ajax导出文件名称是乱码问题

Ajax导出文件名称是乱码问题

Ajax导出文件名称是乱码问题
【问题描述】:
通过Ajax请求导出文件,文件导出地址URL是通过URLEncode r.encode(url“UTF-8”)编码过的,但是遇到了这样一个问题,导出的文件文件内容没有任何问题,但是文件名称包含中文时文件名称显示乱码问题。

【个人猜想及验证结果】:
是编码和解码的问题,尝试了一番,并没有得到想要的结果。

【解决方案】
由于本地运行项目是部署在tomcat中,所以此结果方案现只针对tomcat。

修改Tomcat下的conf文件夹中的server.xml配置文件
修改前:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
修改后:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />。

PHP调用Ajax编码问题解决方案.

PHP调用Ajax编码问题解决方案.

PHP调用Ajax编码问题解决方案.今天给一老乡做一问题提交系统,利用Ajax简单做了下,中途也对Ajax的学习又重新来了一篇.主要是关于乱码的问题.一.出现乱码的几种可能性代码:1、数据返回时与默认网页编码不同.如网页为gb2312,但是返回来的数据一般为utf-8.2、数据进入数据库时,编码与数据不同。

而导致乱码.二、解决方法。

代码:1、始终记住一个网页只能有一种编码,因此在要么修改网页的编码(但是相当麻烦)。

要么修改数据的编码(当然这其实是对Ajax提交的数据重新处理).2、统一数据库与网页的编码,要么用gb,要么用utf-8.三、几个有用的函数.PHP中utf-8与gb码的互换.代码:/*** 编码UTF-8到GB2312之间的转换** @param string $c* @return string*/function utf82gb($c){$str="";if ($c < 0x80) {$str.=$c;} else if ($c < 0x800) {$str.=chr(0xC0 | $c>>6);$str.=chr(0x80 | $c & 0x3F);} else if ($c < 0x10000) {$str.=chr(0xE0 | $c>>12);$str.=chr(0x80 | $c>>6 & 0x3F);$str.=chr(0x80 | $c & 0x3F);} else if ($c < 0x200000) {$str.=chr(0xF0 | $c>>18);$str.=chr(0x80 | $c>>12 & 0x3F);$str.=chr(0x80 | $c>>6 & 0x3F);$str.=chr(0x80 | $c & 0x3F);}return iconv(‘UTF-8‘,‘GB2312‘, $str); }VBScript修改Ajax返回数据.代码:Function bytes2BSTR(vIn)dim istrReturn = ""For i = 1 To LenB(vIn)ThisCharCode = AscB(MidB(vIn,i,1))If ThisCharCode < &H80 ThenstrReturn = strReturn & Chr(ThisCharCode)ElseNextCharCode = AscB(MidB(vIn,i+1,1))strReturn = strReturn & Chr(CLng(ThisCharCode) * &H100 + CInt(NextCharCode))i = i + 1End IfNextbytes2BSTR = strReturnEnd Function。

ajax请求乱码的解决方法(中文乱码)

ajax请求乱码的解决方法(中文乱码)

ajax请求乱码的解决⽅法(中⽂乱码)今天遇到⼀个问题,有关ajax请求中传输中⽂,遇到乱码的问题。

如下代码:复制代码代码如下:function UpdateFolderInfoByCustId(folderId, folderName, custId) {$.ajax({type: "Post",contentType: "application/x-www-form-urlencoded; charset=utf-8",url: "http://localhost/CRM/Ashx/HandKBSucessCustomer.ashx?Method=UpdateCustomerByCustId&folderId="+ folderId + "&folderName=" + encodeURI(encodeURI(folderName)) + "&custId=" + custId,success: function (msg) {alert(msg);},error: function (error) {alert(error);}});}如上代码如果只是传“&foderName=”+folderName 的话,汉字就会产⽣乱码,如果经过encodeURL 转换两次的话,汉字编码会变为类似“%e6%b5%8b%eb%af%95” 的格式。

转换为这种格式之后,在获取的时候在转码,如下所⽰:复制代码代码如下:public void UpdateCustomerByCustId(){int folderId = Convert.ToInt32(Request["folderId"]);string folderName = Request["folderName"];string folderName2 = Convert.ToString(System.Web.HttpUtility.UrlDecode(folderName));int custId = Convert.ToInt32(Request["custId"]);bool res = false;try{res = CustomerBusiness.UpdateCustomerByCustId(folderId, folderName2, custId);}catch (Exception ex){throw;}Response.Write(res);}}}经此转换之后,即可获取到传输的汉字。

AJAX处理汉字乱码的问题

AJAX处理汉字乱码的问题

AJAX处理汉字乱码的问题JSP中乱码产⽣的原因是web容器(Tomcat)默认使⽤ISO-8859-1进⾏编码的,⽽我们可能使⽤的是UTF-8,GBK,GB2312等编码⽅式进⾏jsp编写的,因此需要⼀个转换器进⾏转换或者修改默认编码⽅式,这⾥我主要⽤转换器+过滤器完成⾃动转换功能.客户端脚本⽂件:View Code/** name:getTransport* create XMLHttpRequest*/var xmlhttp=null;function getHttpRequest(){try{xmlhttp=new ActiveXObject('Msxml2.XMLHTTP');}catch(e){try{xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');}catch(e1){xmlhttp=new XMLHttpRequest();}}}function httpGet(url,method,data){if(xmlhttp==null)getHttpRequest();xmlhttp.open(method,url +"?"+data,true);//有回调函数时为true,没有时falsexmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-Length",data.length);xmlhttp.onreadystatechange=getCallback;xmlhttp.send (null);}function getCallback(){if(xmlhttp.readyState==4){if(xmlhttp.status==200){var xmlDoc=xmlhttp.responseText;data=eval(xmlDoc);var tableFormat="<table rules='all' ><tr><td class='tablehead'>编号</td><td class='tablehead'>姓名</td><td class='tablehead'>性别</td><td class='tablehead'>电话</td><td class='tablehead'>地址</td><td class='tablehead'>星座</td><td for(var key in data){tableFormat+="<tr><td>"+data[key].id+"</td><td>"+data[key].name+"</td><td>"+data[key].sex+"</td><td>"+data[key].phone+"</td><td>"+data[key].address+"</td><td>"+data[key].constellation+"</td><td><a target='"+data[key].id+"' title='修改' onclick='openedit(this)'><img src='img/edit.jpg'></a></td><td><a target='"+data[key].id+"' title='删除' onclick='opendel(this)'><img src='img/del.jpg' ></a></td>< }tableFormat+="</table>";document.getElementById("showout").innerHTML=tableFormat;}else{document.getElementById("showout").innerHTML="AJAX Server error,code:"+xmlhttp.status+"!";}}}function httpPut(url, method, data){if(xmlhttp==null)getHttpRequest();xmlhttp.open(method,url,true);xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-Length", data.length);xmlhttp.onreadystatechange=putCallback;xmlhttp.send(data);}function putCallback(){var panel=document.getElementById("showsuccess");if (xmlhttp.readyState==4){if(xmlhttp.Status >=400 && xmlhttp.Status <=599)panel.innerHTML="Error Occurred : "& xmlhttp.Status & "-" & xmlhttp.statusText;else{panel.innerHTML=xmlhttp.responseText;httpGet("myServlet", "GET", "name="+"获得数据");}setTimeout(hideinfo,1000);}}function httpPost(url, method, data){if(xmlhttp==null)getHttpRequest();xmlhttp.open(method,url,true);xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-Length",data.length);xmlhttp.onreadystatechange=postCallback;xmlhttp.send(data);}function postCallback(){var panel=document.getElementById("showsuccess");if(xmlhttp.readyState==4){if(xmlhttp.status==200){if(xmlhttp.Status >=400 && xmlhttp.Status <=599)panel.innerHTML="Error Occurred : "& xmlhttp.Status & "-" & xmlhttp.statusText;else{panel.innerHTML=xmlhttp.responseText;httpGet("myServlet", "GET", "name="+"获得数据");}setTimeout(hideinfo,1000);}}}function httpDelete(url, method, data){if(xmlhttp==null)getHttpRequest();xmlhttp.open(method,url+"?"+data,true);xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");xmlhttp.setRequestHeader("Content-Length", data.length);xmlhttp.onreadystatechange=deleteCallback;xmlhttp.send(null);}function deleteCallback(){if (xmlhttp.readyState==4){if(xmlhttp.Status >=400 && xmlhttp.Status <=599)document.getElementById("showsuccess").innerHTML="Error Occurred : "& xmlhttp.Status & "-" & xmlhttp.statusText;else{document.getElementById("showsuccess").innerHTML=xmlhttp.responseText;httpGet("myServlet", "GET", "name="+"获得数据");}setTimeout(hideinfo,1000);}}function getAjaxJson(){httpGet("myServlet", "GET", "name="+"获得数据");}function addAjaxJson(){var panel=document.getElementById("addpanel");document.getElementById("title").innerHTML="增加学⽣信息选项卡";panel.style.top='50px';panel.style.left='200px';panel.style.display='block';document.getElementById("addedit").value="提交";flag=true;}function closepanel(){document.getElementById("addpanel").style.display='none';}function addrecord(){var panel=document.getElementById("showsuccess");var s= new Object();s.Id=id;=document.getElementById("name").value;s.Sex=document.getElementById("sex").value;s.Phone=document.getElementById("tel").value;s.Address=document.getElementById("address").value;s.Constellation=document.getElementById("star").value;if(==""){panel.innerHTML="学⽣姓名不能为空";setTimeout(hideinfo,1000);return;}if(s.Sex==""){panel.innerHTML="学⽣性别不能为空";setTimeout(hideinfo,1000);return;}if(s.Phone==""){panel.innerHTML="学⽣电话不能为空";setTimeout(hideinfo,1000);return;}if(s.Address==""){panel.innerHTML="学⽣家庭不能为空";setTimeout(hideinfo,1000);return;}if(s.Constellation==""){panel.innerHTML="学⽣星座不能为空";setTimeout(hideinfo,1000);return;}var data= JSON.stringify(s);if(flag==true){httpPut("myServlet","PUT",data);}else{httpPost("myServlet","POST",data);}}function openedit(obj){var panel=document.getElementById("addpanel");document.getElementById("title").innerHTML="更新学⽣信息选项卡";panel.style.top='50px';panel.style.left='200px';panel.style.display='block';document.getElementById("addedit").value="保存";for(var key in data){if(data[key].id==obj.target){id=data[key].id;document.getElementById("name").value=data[key].name;document.getElementById("sex").value=data[key].sex;document.getElementById("tel").value=data[key].phone;document.getElementById("address").value=data[key].address;document.getElementById("star").value=data[key].constellation;break;}}flag=false;}function opendel(obj){var mid=null;for(var key in data){if(data[key].id==obj.target){mid=data[key].id;break;}}if(confirm("你确定要删除数据吗?"))httpDelete("myServlet","DELETE","id="+mid);}function hideinfo(){document.getElementById("showsuccess").innerHTML='';}⾸先,项⽬中所有的源⽂件(.class,*js,*.css)的编码⽅式改为UTF-8。

ajax中文乱码问题的总结

ajax中文乱码问题的总结

ajax中⽂乱码问题的总结本章解决在AJAX中常见的中⽂问题,分析中⽂乱码产⽣的原因,以及如何解决乱码问题1. HTTP协议的编码规定在HTTP协议中,浏览器不能向服务器直接传递某些特殊字符,必须是这些字符进⾏URL编码后再进⾏传送。

url编码遵循的规则:将空格转换为(+)对0-9,a-z,A-Z之间的字符保持不变。

对于所有其他的字符,⽤这个字符的当前字符集编码在内存中的⼗六进制格式表⽰,并在每个⼗六进制字节前加上⼀个百分号%。

例如,字符“+”⽤%2B表⽰,字符“=”⽤%3D表⽰,字符“&”⽤%26表⽰,字符“国”⽤%B9%FA表⽰注意,同⼀个中⽂字符在不同的字符集编码⽅式下,在内存中的编码值也是不同的,⼀个字符的URL编码是针对字符在内存中的码值⽽⾔的,采⽤不同编码的同⼀个字符的URL编码结果是不同的。

2. encodeURI()与encodeURIComponent()函数javaScript中提供了两个函数来对字符进⾏URL编码:encodeURI()与encodeURIComponent(),两者的区别在于,encodeURI函数不会对以下的字符进⾏处理: “! @ # $ & * ( ) = : / ; ? + ' ”,⽽encodeURIComponent函数会对更多的字符进⾏处理⽐如 URI的组成部分 “/” 就会被encodeURIComponent进⾏处理。

这两个⽅法对传递的值进⾏URL编码,过程是先找到字符所对应的UTF-8编码,⽐如“张三”两个字的UTF-8编码是”0xE5BCA0E4B889”(前⾯的是零x,表⽰是16进制编码).“张”是”0xE5BCA0”,”三”是”0xE4B889”,那么被转换后的结果就是”%E5%BC%A0%E4%B8%89”,注意这个转换结果与⽹页的编码没有任何关系,因为这两个函数总是拿到字符所对应的UTF-8码,然后再进⾏URL编码的。

Ajax使用POST提交中文乱码问题

Ajax使用POST提交中文乱码问题

Ajax使用POST提交中文乱码问题前段时间写JSP,使用AJAX以POST方式提交数据,如果是中文字符提交就会乱码,后来写ASP时用到AJAX以POST方式提交数据,中文一样是乱码。

搜索一下相关资料,问题应该是提交数据时是以UTF-8编码提交,所以接收时如果使用GB2312或者其它中文编码的话就会乱码。

使用GET方式提交数据的时候,中文问题很好解决,setRequestHeader("Content-Type","text/html; encoding=gb18030")就可以了。

但这个方法在POST方式中却不起作用。

大家都知道GET方式提交数据有长度限制,有时我们必须使用POST方式来提交数据。

对于使用POST,JSP的解决方法如下:使用escape(或encodeURI,两个函数都是JavaScript的函数,功能基本相同,可以查一下相关的帮助),但要使用两次,这个是关键。

初始页面内容如下(hello.jsp):<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>AJAX提交页面</title><meta http-equiv="Content-Type" content="text/html; charset=GB18030"><script type="text/javascript">function justdo(){var post = "name=王力猛&email=wallimn@&bokee=";post = encodeURI(post);post = encodeURI(post); //两次,很关键var xmlObj = new ActiveXObject("Msxml2.XMLHTTP");var URL = "act.jsp"; //文件名需要调整成测试时的相应位置xmlObj.open("POST",URL,true);xmlObj.setRequestHeader("Cache-Control","no-cache");xmlObj.setRequestHeader("Content-Type","application/x-www-form-urlencoded;");xmlObj.send(post); //注意:POST方式,使用这个来发送内容}</script></head><body><input type="button" value="提交" onclick="justdo()" /></body></html>Ajax请求处理页面(act.jsp)的内容如下:<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><%@page import=".URLDecoder"%><html><head><title>ajax deal</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"></head><body><%//遍历输出参数内容。

php乱码解决方案

php乱码解决方案

PHP乱码解决方案
1. 什么是乱码
在开发和使用PHP时,经常会遇到乱码问题。

乱码通常是由于字符编码不一致或配置不正确而导致的。

乱码指的是在文本显示或传输过程中出现了无法正常解析的字符,显示为乱码符号,无法按照原本的字符显示。

2. 乱码的原因
2.1 字符编码不一致
字符编码是表示字符在计算机中的二进制表示方法。

常见的字符编码包括UTF-8、GBK、ISO-8859-1等。

当对一个已经编码的文本进行解码时,如果解码的字符编码与实际编码不一致,就会出现乱码。

2.2 字符编码和数据库存储不一致
在Web开发中,经常使用到数据库存储数据。

如果数据库的字符编码与PHP 脚本的字符编码不一致,就可能导致显示乱码。

2.3 响应头未设置字符编码
在Web开发中,服务器会通过响应头(Response Header)告诉客户端使用何种字符编码。

如果未设置字符编码或设置不正确,客户端接收到的数据就可能出现乱码。

3. 解决方案
3.1 设置PHP脚本字符编码
确保在PHP脚本文件开头处设置正确的字符编码,例如:
```php <?php header(。

jQuery Ajax中文乱码问题-

jQuery Ajax中文乱码问题-

jQuery Ajax中文乱码问题?
问题:jQuery Ajax中文乱码问题? 回答:
$.ajax( dataType : json ,type : POST ,url : http://localhost/test/test.do ,data : id: 1, type: 商品,success : function(data) );
问题:
提交后后台action程序时,取到的type是乱码
解决方法:
方法一:提交前采用encodeURI两次编码,记住一定是两次
1.修改以下代码
data: id:1, type:encodeURI(encodeURI( 商品)) 2.在后台action里要对取得的字符串进行decode
1String type = request.getParameter( type );2type = URLDecoder.decode(type, UTF-8 );
方法二:ajax配置contentType属性,加上charset=UTF-8
在ajax方法中加入以下参数
contentType: application/x-www-form-urlencoded; charset=UTF-8 使用其它js框架或者xhr都是差不多,设置header 中contentType即可,
这里关键是charset=UTF-8,如果没有这个,是不行的,默认
jQuery里的contentType是没有的.
方法二在action里不需要进行decode,所以推荐使用此方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

明确问题:很多朋友出现乱码后,就在论坛发帖,或网上搜寻相关文章.然后,很快就认识了header("content-type:text/html; charset=utf-8"),iconv('gbk', 'utf-8', " ...."),mysql_query(set names xxx)以及一个什么php实现的unescape函数等等甚至连为什么产生乱码都没去想,问题有时候还真被解决了[这就是互联网的神奇之处]其实,根本问题很容易理解,就是存储方式和读取方式不一致你存储的是一段utf-8编码的文字,却告诉浏览器用gb2312的方式去解析.问题自然就来了!如下面这段代码,用记事本保存为html文件,IE打开是没有任何问题的!如果你把第四行的gb2312改为utf-8那问题自然就来了因为记事本默认的是用ANSI标准保存,而gb2312是其中的一种!对于简体中文的操作系统,我们存储的是一段gb2312数据!如果你骗浏览器这是一段utf-8的数据,那这个忠实的仆人自然就会犯错误了![gb2312改成utf-8(请在记事本中修改)后,标题和内容成乱码了]复制内容到剪贴板代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title></head><body><p>无标题文档</p></body></html>整个ajax+php应用中,数据要转手两次存在于三个层次中分别是前台html 后台php 以及数据库下面将按一个读取的过程,依次分析两次转手的过程数据库<->php过程分析mysql编码问题,应该是我们论坛的朋友最熟悉的,就不多说了!而且没有什么可说的,你只要能确定你当前数据库中的数据不是乱码就行了这里,提一下mysql_query("SET NAMES '编码格式如(utf8)'")我找了一段网上关于set names 的说明:复制PHP内容到剪贴板PHP代码:SET NAMES显示客户端发送的SQL语句中使用什么字符集。

因此,SET NAMES 'cp1251'语句告诉服务器“将来从这个客户端传来的信息采用字符集cp1251”。

它还为服务器发送回客户端的结果指定了字符集。

(例如,如果你使用一个SELECT语句,它表示列值使用了什么字符集。

)SET NAMES 'x'语句与这三个语句等价:mysql> SET character_set_client = x;mysql> SET character_set_results = x;mysql> SET character_set_connection = x;将x设置为character_set_connection也就设置了collation_connection是x的默认校对规则。

感觉它说得不够俗,咱来通俗点:其实,他的作用就是告诉数据库,"我传给你的将是一段X编码的数据,请按X编码理解","你传给我的数据也必须翻译成X编码的,我只懂X编码"注意上面的两个引号部分,这说明他分别设定了读取和写入两个层次所以在PHP读取MYSQL中的数据的时候,只要你的数据库中的数据本身不是乱码!你执行mysql_query("SET NAMES '编码格式如(utf8)'")后,读取出来的数据,都将是UTF-8格式的正常数据!同理,只要你执行sql 语句里的数据都是utf-8格式的,存如数据库后都不会是乱码.下面来做个实验:复制PHP内容到剪贴板PHP代码:<?php/*......省略......$conn = mysql_connect($hostname,$username,$password);mysql_query("SET NAMES 'UTF8'");......省略......类似以上方式随便在数据库中读取一段数据,他都将保存成一段utf-8格式编码的数据这里为了你测试方便,我用iconv函数模拟了一下[本页左上方,可以查看iconv 的详细内容]如楼上所说,用记事本保存这段代码,所有数据格式将是gb2312的因此下面的变量$test未经过iconv之前,将是gb2312格式的数据!经过iconv后变成一段utf-8格式的数据而输出的HTML 如果你不手动设置一下header 各个浏览器的处理方式是不一样有兴趣的可以自行测试一下所以为了统一一下,这里设置一下header执行结果第一行将是乱玛,第二行是正常的! 为什么应该还是很容易理解的吧!*/header("content-type:text/html; charset=utf-8");$test = "大家好!";echo $test."<br />";$test = iconv('gbk', 'utf-8', $test); //我假设这个将是你从数据库中读出来的正常的UTF-8数据echo $test;?>请将header("content-type:text/html; charset=utf-8"); 改为header("content-type:text/html; charset=gb2312"); 再测试一下这从侧面说明了header的作用他并未转换任何数据而仅仅通知一下浏览器应该用什么方式理解数据这是浏览器对http协议的实现,我们不用管它ps:对PHP应用来说,乱码问题到此已经结束.但对ajax+php应用来说,还没有,还有一个php经ajax 处理-到HTML页面的过程后面将分别对IE浏览器和非IE浏览器做进一步讲解这部分写完了,还没跟大家说在PHP部分究竟应该怎么做! 为什么?晚上写完了你就知道了!这里理解一下,set names iconv 和header先本来说,按IE和非IE浏览器分别讲一下,php与前台通过ajax交互这一过程的.细想了下,发现没这必要! [文中的非IE浏览器指FF和OPERA]这两类浏览器对ajax的实现区别很大,但这个具体的实现对我门程序员来说是透明的我们没有必要去深究我们只要知道具体应用的时候,有哪些需要注意的地方就行了IE是通过内置的ActiveXObject来实现ajax的,而非IE浏览器是用XMLHttpRequest类来实现的.一些细微的差别因此而来!以下是我自己总结的几条规律:[初看的时候,你可能不理解,下面会一一解释]1.AJAX读取的时候,对IE浏览器来说,只要php端传给他的是UTF-8的数据,他就能正常显示.2.AJAX读取的时候,对非IE浏览器来说.只要数据在php本身能正常显示,他被传到浏览器中也能正常显示.3.AJAX写入的时候,IE与非IE浏览器是一样的.不管你在浏览器端是什么编码格式的数据,被传到PHP中后,都将变成正常的UTF-8格式数据!四楼有张图,可以参照一下针对IE:这里先说一下,传给他是UTF-8数据是什么意思.请看下面这两段代码![这里默认为你的编辑器用gb2312格式保存文件!这点很重要!若不是,结果将不同!但不代表原理有误!]复制PHP内容到剪贴板PHP代码:<?phpheader("content-type:text/html; charset=gb2312");$test = "大家好!";$test = iconv('gbk', 'utf-8', $test);echo $test;?>复制PHP内容到剪贴板PHP代码:<?phpheader("content-type:text/html; charset=utf-8");$test = "大家好!";$test = iconv('gbk', 'utf-8', $test);echo $test;?>虽然以上两段代码执行后,一段乱码,一段正常!但不可否认,经过iconv处理后,他门输出的都是UTF-8编码的数据!如前面所说:"AJAX读取的时候,对IE浏览器来说,只要php端传给他的是UTF-8的数据,他就能正常显示."因此,这两段代码在IE下,用AJAX读取过去,都将是正常显示的!测试HTML页面[请将上面的两段PHP依次保存为test.php.与该HTML文件放同一目录下做测试]复制内容到剪贴板代码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title><script type="text/javascript">function manageres(){var objText = this.req.responseText;var objChange = document.getElementById("result");objChange.innerHTML = objText;}function createrep() {if (typeof XMLHttpRequest != "undefined") {return new XMLHttpRequest();}else if (window.ActiveXObject) {var Versions = [ "MSXML2.XMLHttp.5.0","MSXML2.XMLHttp.4.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"," Microsoft.XMLHttp"];for (var i = 0; i < Versions.length; i++) {try {var XMLHttp = new ActiveXObject(Versions);return XMLHttp;}catch (e) {}}}}var net=new Object();net.ContentLoader=function(){this.req=null;this.onload=manageres;}net.ContentLoader.prototype={loadXMLDoc:function(query){this.req=createrep();if (this.req){var loader=this;this.req.open('GET',"test.php?date="+new Date().getTime(),true);this.req.onreadystatechange=function(){loader.onReadyState.call(loader);}this.req.send(null);}},onReadyState:function(){var req=this.req;var ready=req.readyState;if (ready==4){var httpStatus=req.status;if (httpStatus==200 || httpStatus==0){this.onload.call(this);}}}}var selector = new net.ContentLoader();</script></head><body onload="selector.loadXMLDoc();"><div id="result"></div></body></html>IE下测试均正常的.而FF和OPERA下,用第一段PHP测试的话将是乱码!针对非IE浏览器[FF,OPERA]:下面再引入第三段PHP复制PHP内容到剪贴板PHP代码:<?phpheader("content-type:text/html; charset=gb2312");$test = "大家好!";echo $test;?>这段php直接执行是能正常显示的,不会出现乱码!它和第二段php一起佐证我的第二个结论:"AJAX读取的时候,对非IE浏览器来说.只要数据在php本身能正常显示,他被传到浏览器中也能正常显示."所以,你用第二和第三段PHP做为test.php的话,会发现test.html页面在ff与opera下均是正常的!而用第三段的话ie下是乱码!你真的理解了,我总结的这两条了吗? 请思考,5楼留下的那个题目!至于,第三个结论,请自行证明!因为要证明的话,最好联系数据库做测试最好!我这里就不做了!最终结论:我们只要保证三点,就可以使你的AJAX+PHP应用中不出现乱码了!而且是兼容各种浏览器的!1.在php页面中,使用mysql_query("SET NAMES 'UTF8'");读取数据库中的文件!2.在文件前面设置header("content-type:text/html; charset=utf-8")3.php文件中不能出现一个汉字!这些汉字多办是不必要的,或是应该直接保存在js文件中的![初学者喜欢用中文表名的毛病也要注意了.]至于9楼所说的那种采集程序,没用到数据库.正好可以归为另一类.就要用到iconv了之类的转换函数了对于这类ajax应用,我们前面得到的最终结论,你只要改动第一条就行了1.在php页面中,使用iconv('gbk', 'utf-8', $test); iconv('gb2312', 'utf-8', $test)将获取的数据转换成utf-8编码就行了![当然,被采集的页面本身是utf-8编码就不需要转换了,但其他两条仍需遵守!]综上,你的php页面能正常的取到utf-8数据,输出的文件头(header())为utf-8就不会出现乱码!关键还是理解在各个过程中,编码的变化过程! 以及IE与非IE浏览器的区别![请点击查看大图][常见问题列表:]1.Cannot add header information - headers already sent by ...错误!这是UTF-8头问题!你找一个能显示UTF-8头的编辑器,会看到你的PHP页面开头是"锘?<?php".这是你的编辑器转换页面格式的时候自动添加上去的,少数编辑器可以通过设置禁止.2.data too long for column 错误请不要从字面上理解这个错误! 在AJAX应用中,这个错误通常是由于你的SQL语句和数据的编码中有中文且和set names 的格式不一样(如果你没设置set names 那就是和数据库的默认设置不一样),从而出现乱码造成的!还有一种情况看这个帖子:/bbs/thread-19695-1-1.html。

相关文档
最新文档