<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[PHP中firefox 浏览器ajax提交中文乱码完美解决（IE和Firefox兼容）]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Fri, 15 Oct 2010 11:28:41 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	firefox 浏览器ajax提交中文乱码完美解决<br/><br/>最近在做一个项目，遇到AJAX中文乱码问题，经过一个下午的努力终于完美解决，现将心得写下来，希望对那些还困绕在这个问题而头痛不已的人们有所帮助。<br/>众所周知，使用AJAX传送和接收中文参数时，如果不在客户端和服务器做相应的处理就会出现乱码问题，在网上相应的文章也不少，但是有的情况下很难从中找到符合自己理想的答案，我今天就是在网上找了很多，但是都差不多，讲ASP和JSP的比较多（我是用的PHP），所以到最后都没找到自己满意的答案。<br/>AJAX的中文乱码可以大概分为两中，第一种是向服务器端发送中文参数时（xmlhttp.open(“get&#124;post”,url,true)）, 服务器端接收到的为乱码，这个也是我今天遇到的问题，没做处理之前，在IE里是正常的，但是在Firefox里面就出现了乱码，我先把接收到参数输出到一个文本里，没有发现什么问题，郁闷了，然后我就把查询语句在输出来观察（我这里是要从数据库里查出与参数相关的东西），终于发现问题，IE和 Firefox输出的参数不一样，虽然汉字上都一样，但是和前后连接上有细小的区别，于是认定了是编码问题，在网上查找了相关资料，都没能解决问题，但是得到一些启示，因为AJAX发送数据都是采用UTF-8编码的方式发送的，所以要在服务器端进行编码转换（我这里页面是采用GB2312编码的，如果是采用UTF-8的话应该不会有这步的问题），所以我在服务器端进行了UTF-8转GB2312，<br/> <br/><br/>$str=iconv(“UTF-8″,”GB2312″,$str);<br/> <br/><br/>然后测试，在Firefox上顺利解决了问题，以为大公告成了，可是再到IE下测试，发现IE又出现了问题，服务器端接收到的参数没值，这下就郁闷了，突然看到发送头设置了setRequestHeader(“Content-Type”,”application/x-www-form- urlencoded”);，就找到问题所在了，然后就在发送那里进行了参数编码：<br/>geturl=encodeURI(geturl);<br/>geturl=encodeURI(geturl); //两次也可以写成geturl=encodeURI(encodeURI(geturl));<br/>xmlhttp.open(“GET”,geturl,true);<br/>然后再到服务器端进行URL解码：<br/>$str=urldecode($str); //解码 <br/>$ str =iconv(“UTF-8″,”GB2312″,$ str);&nbsp;&nbsp;//编码转换<br/>注意：解码必须在编码转换前面，不然得不到正确值<br/>保存测试，IE和Firefox都能正常了。<br/>第二种就是服务器端向客户端输出中文时出现乱码，这类问题网上的答案就比较多了，也都能解决，为了避免各位再去查找，我在这里就COPY下J<br/>原因：AJAX在接收responseText或responseXML的值的时候是按照UTF-8的格式来解码的，如果服务器段发送的数据不是UTF-8的格式，那么接收responseText或responseXML的值有可能为乱码。<br/><br/>ajax乱码解决办法一：<br/><br/><br/>在服务器指定发送数据的格式：<br/>在jsp文件中：<br/>response.setContentType(“text/text;charset=UTF-8″);//返回的是txt文本文件<br/>或是<br/>response.setContentType(“text/xml;charset=UTF-8″);//返回的xml文件<br/>PHP:header(”Content-Type:text/html;charset=GB2312”);<br/><br/>ajax乱码解决方法二：<br/><br/>PHP发送中文、Ajax接收<br/>只需在php顶部加入一句：<br/>header(‘Content-type: text/html;charset=GB2312′);<br/>xmlHttp会正确解析其中的中文。<br/>Ajax发送中文、PHP接收<br/>这个比较复杂：<br/>Ajax中先用encodeURIComponent对要提交的中文进行编码<br/>PHP中：<br/>$GB2312string=iconv( ‘UTF-8′, ‘gb2312//IGNORE’ , $RequestAjaxString);<br/>PHP写入MySQL数据库<br/>建立conn时，query一下set names “gb2312″<br/>==================================================<br/>注意红色部分！！！否则无法使用！！！具体原因自己猜！<br/>iconv( “UTF-8″,”GBK” , $gametypes[&quot;name&quot;]);<br/><br/> 原创：<br/><br/>我的乱码问题是AJAX取数据时产生乱码，本来页面是采用GBK编码的。后来显示为乱码，我使用UE把它转换成UTF-8后，<br/><br/>页面上原来的元素就可以显示正确了。但是，数据库取出来的值还是会乱码。<br/><br/>ob_get_contents ()；<br/><br/>取出所有的显示数据，然后输出到日志文件，显示全是乱码。<br/><br/>使用UE把文件再转换成GBK，然后再输出，显示就正确了。<br/><br/>这里再使用：header(‘Content-Type:text/html;charset=GBK’);<br/><br/>前台页面显示就正常。<br/>来源：http://www.chhua.com/web-note313
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] PHP中firefox 浏览器ajax提交中文乱码完美解决（IE和Firefox兼容）]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>