jquery ajax post 中文乱码问题
测试用到二个文件,一个是test.html,一个是test.php
test.html中,单击按钮向test.php用post方法提交请求
test.php中,用switch判断提交的参数,返回输出值
二个文件均为utf8编码(即记事本中写代码,保存时选择uft-8)
<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js">
</script>
<script>
$(document).ready(function(){
$("button").click(function(){
$.post("test.php",
{
name:"lxl",
city:"Duckburg"
},
function(data,status){
alert("数据:" + data + "\n状态:" + status);
});
});
});
</script>
</head>
<body>
<button>向页面发送 HTTP POST 请求,并获得返回的结果</button>
</body>
</html>
<?
//$id = (int)addslashes($_GET["name"]);
$name = addslashes($_POST["name"]);
switch($name)
{
case "zjh":
//your code
echo "张";
break;
case "lxl":
echo "里";
break;
default:
echo "好";
break;
}
//echo "good!";
echo "你好卡!";
?>
运行结果:
如果文件不是UTF-8格式,那返回的中文将显示为乱码。
将test.html文件改为ANSI,test.php为UTF-8,中文显示正常;
将test.html文件改为ANSI,test.php也改为ANSI,中文显示乱码;
将test.html文件改为UTF-8,test.php也改为UTF-8,中文显示正常;
将test.html文件改为UTF-8,TEST.PHP改为ANSI,中文显示乱码;
所以,决定中文显示正常于否的关键,在于提交的目标php文件是否是UTF-8编码。
以下是在网上看到的一点内容,附在后面,说不定有用到的时候:
http://blog.****.net/phpme/article/details/1042623
一味的想改变XMLHTTP对象Post表单的发送方式,使它以GB2312来发送,完全找不到门路。后来经过论坛的朋友提醒,在后台接收数据时把编码转换,效果难道不是一样么。
后台语言如果是PHP,用 iconv( "UTF-8", "gb2312" , $_POST["post"]) 这个函数转换一下,轻松解决。至于ASP或其他后台语言的话,我并不熟悉,原理是一样的,在接收到数据后先转换编码再使用。
PS:XMLHTTP对象Post表单时,记得要增加2个表头设置^_^
var post="Apple=苹果&Banana=香蕉";
xmlObj.open ('POST',URL,true);
xmlObj.setrequestheader("content-length",post.length);
xmlObj.setrequestheader("content-type","application/x-www-form-urlencoded");
xmlObj.send (post);