先说一下情况,我网页中的ajax开始是在谷歌浏览器中调试的,是可以传汉字到PHP服务端,PHP服务端也是可以接受的。后来由于项目需要,因为我们是做游戏的,游戏在电脑上有一个客户端,所以将网页放到客户端里面了,又因为我们的客户端是IE浏览器,所以这时候ajax传过去的汉字在PHP服务端接受的是空值,所以有了以下的改动。
出错前的前端代码:
$.get(ajaxMakeCard?uu="+uu+"&giftname="+giftname+"&amount="+amount+"&description="+description+"&validcode=" + validcode, function(data,status){
if(status=="success"){
//console.log("data: "+data);
alert("data: "+data);<br> }
});
这里直接利用ajax发送get请求
出错前的PHP服务端代码
$info = array();
$info['giftname'] = $_GET['giftname'];
$info['description'] = $_GET['description'];
很简单直接使用$_GET方法获取传递的参数信息
问题:除了谷歌浏览器,其他的浏览器上php服务端都无法接受前端传递的汉字(英文和数字都没问题)
解决办法:
在前端对URL进行编码,PHP服务端上进行解码
修改后的前端代码
var geturl = "ajaxMakeCard?uu="+uu+"&giftname="+giftname+"&amount="+amount+"&description="+description+"&validcode=" + validcode;
geturl=encodeURI(encodeURI(geturl));
alert("执行ajax前:"+geturl);
$.get(geturl, function(data,status){
if(status=="success"){
//console.log("data: "+data);
alert("data: "+data);
}
});
在发送请求前编码
修改后的PHP服务端接受代码
$info = array();
$info['uu'] = $_GET['uu'];
$info['giftname'] = urldecode($_GET['giftname']);
$info['description'] =urldecode($_GET['description']);
问题解决,希望能帮到你!
修改后的写法,在谷歌浏览器上也是可以的传汉字的,亲测有效!!!