切换风格

Wizard Sky California Sunset glow Black Cloud Beige Dragon Lavender NewYear City Snow Flowers London
收藏本站XSS平台字符串转换jsfuck
Ajax+php post中文乱码问题解决(两种方式)[复制链接]
发表于 2013-3-28 18:19:58 | 显示全部楼层 |!read_mode!
第一种
===================================
使用escape函数编码要post的数据
接收时unescape就可以解决乱码问题。
下面的方法现在看来有些笨了。

这个问题一直困扰着我,放了很长时间,今天下午终于差不多解决了。
经过不停的google,我找到了方法。
首先,Ajax post时浏览器默认采用utf-8编码,页面编码统一为utf-8。
建立request请求后,先服务器post值时,先将字符进行编码。


createRequest();
content=document.getElementById("content").value;
var url="test.php";
request.open("POST",url,true);
request.onreadystatechange=updatePage;
request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
content=encodeURI(content);//进行编码
var data="content="+content; 
request.send(data);


服务器端php脚本:
<?php
header("Content-type:text/html;Charset=utf-8");
$content=$_POST["content"];
$content=urldecode($content);
echo $content;
exit;
?>


经测试,服务器向客户端传值时,IE正常,Firefox乱码。
解决Firefox乱码
改进服务器端脚本:


<?php
header("Content-type:text/html;Charset=utf-8");
$content=$_POST["content"];
$content=urldecode($content);
echo urlencode($content);
exit;
?>


完美解决。

如果页面采用gb2312编码,那解决方法会麻烦些。
首先前端ajax向服务器post值时,进行两次编码。
js代码:
content=encodeURI(encodeURI(content));
服务器端:
使用php字符编码函数,iconv ( string in_charset, string out_charset, string str)
但是这个函数如果没有服务器端权限时的确很费劲,不过使用这个函数即可解决中文乱码问题。


第二种
========================================
只需要在php接收的时候转换一次需要的编码即可
如:
if(mb_detect_encoding($youxiang, 'UTF-8',true) === 'UTF-8'){
				$youxiang = iconv('UTF-8','gbk',$youxiang);
			}
			if(mb_detect_encoding($shouji, 'UTF-8',true) === 'UTF-8'){
				$shouji = iconv('UTF-8','gbk',$shouji);
			}
			if(mb_detect_encoding($lianxi, 'UTF-8',true) === 'UTF-8'){
				$lianxi = iconv('UTF-8','gbk',$lianxi);
			}





该贴已经同步到 抚菊深思的微博
操千曲而后晓声,观千剑而后识器。
发表于 2013-4-8 12:23:39 | 显示全部楼层
介个,介个,我早些年在邪八看过了{:2_27:}类似,类似
发表于 2013-4-8 12:58:09 | 显示全部楼层
Goodwinner 发表于 2013-4-8 12:23
介个,介个,我早些年在邪八看过了类似,类似

邪八是哪里   我这是  “笔记”:(
发表于 2013-4-9 21:09:42 | 显示全部楼层
邪恶八进制。
发表于 2013-4-12 20:37:27 | 显示全部楼层
王子不是我 发表于 2013-4-9 21:09
邪恶八进制。

邪八是哪里   我这是  “笔记

代码区

GMT+8, 2020-1-24 06:21

Powered by Discuz! X2

© 2001-2018 Comsenz Inc.

回顶部