已解决了ajax(源文件编码gb2312)发送+php接收(源文件编码gb2312)中文乱码问题(utf-8也通用)
2013-04-11 21:26
1011 查看
php代码
header('Content-Type:text/html; charset=gb2312');
$name = urldecode($_POST['name']);
$name = iconv('UTF-8', 'gb2312',$name);
if ( $name == '中国' ){//中文乱码,暂时用是否设置来判断,测试js的判断是否正常先,解决了乱码问题再直接比较输入的内容是否存在==
echo 'false';//有了
}else{
echo 'true';
}
----------------
js代码
------------
{
url: 'chk_user.php?d=中国', //服务端验证程序,返回格式注意:存在,返回false,不存在,返回true
data:{ name: function(){ return encodeURIComponent($("#name").val()); } },
type: "POST", //提交方式
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
}
--------------
在php 返回中(gb2312编码)
---------------------------------------
$_POST[name] => %E4%B8%AD%E5%9B%BD
$name = urldecode($_POST['name']); ==>涓 浗
$name = iconv('UTF-8', 'gb2312',$name); ==> 中国
----------------------------------------------
js(gb2312)
---------------------
url: 'chk_user.php', //服务端验证程序,返回格式注意:存在,返回false,不存在,返回true
data:{ name: function(){ return encodeURIComponent($("#name").val()); } },
type: "POST", //提交方式
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
----------------------------------
post参数
encodeURIComponent('中国') ==> %E4%B8%AD%E5%9B%BD
alert( '|' + decodeURIComponent('%E4%B8%AD%E5%9B%BD') + '|') ==> |中国|
escape('%E4%B8%AD%E5%9B%BD') == > %25E4%25B8%25AD%25E5%259B%25BD
alert( '|' + decodeURIComponent(unescape('%25E4%25B8%25AD%25E5%259B%25BD')) + '|') ==> |中国|
看来post的发送要escape一次
-------------------------------
中国的firefox地址栏编码是:
%D6%D0%B9%FA
----------------------------
其实php中encode是正常的,就是js中的encode是不正常的,看起来它应该是把所有的都解释成了utf8,这是这个问题的关键,
大概意思就是:
源代码编码是gb2312时的htm,l在使用ajax发送时,假设是post方式,data中要把gb2312编码的中文,使用uriencodecomment编码成utf8编码后,注意,无论源代码是gb2312还是utf-8,使用它编码都是得到utf-8的uri编码,所以在php边要decodeuri解码,解码后它还是utf-8来的,如果php源代码是gb2312,那么就需要用iconv反utf-8转成gb2312;如源文件是utf-8就无需转码;解码uri后直接使用;
header('Content-Type:text/html; charset=gb2312');
$name = urldecode($_POST['name']);
$name = iconv('UTF-8', 'gb2312',$name);
if ( $name == '中国' ){//中文乱码,暂时用是否设置来判断,测试js的判断是否正常先,解决了乱码问题再直接比较输入的内容是否存在==
echo 'false';//有了
}else{
echo 'true';
}
----------------
js代码
------------
{
url: 'chk_user.php?d=中国', //服务端验证程序,返回格式注意:存在,返回false,不存在,返回true
data:{ name: function(){ return encodeURIComponent($("#name").val()); } },
type: "POST", //提交方式
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
}
--------------
在php 返回中(gb2312编码)
---------------------------------------
$_POST[name] => %E4%B8%AD%E5%9B%BD
$name = urldecode($_POST['name']); ==>涓 浗
$name = iconv('UTF-8', 'gb2312',$name); ==> 中国
----------------------------------------------
js(gb2312)
---------------------
url: 'chk_user.php', //服务端验证程序,返回格式注意:存在,返回false,不存在,返回true
data:{ name: function(){ return encodeURIComponent($("#name").val()); } },
type: "POST", //提交方式
contentType: "application/x-www-form-urlencoded; charset=UTF-8"
----------------------------------
post参数
encodeURIComponent('中国') ==> %E4%B8%AD%E5%9B%BD
alert( '|' + decodeURIComponent('%E4%B8%AD%E5%9B%BD') + '|') ==> |中国|
escape('%E4%B8%AD%E5%9B%BD') == > %25E4%25B8%25AD%25E5%259B%25BD
alert( '|' + decodeURIComponent(unescape('%25E4%25B8%25AD%25E5%259B%25BD')) + '|') ==> |中国|
看来post的发送要escape一次
-------------------------------
中国的firefox地址栏编码是:
%D6%D0%B9%FA
----------------------------
其实php中encode是正常的,就是js中的encode是不正常的,看起来它应该是把所有的都解释成了utf8,这是这个问题的关键,
大概意思就是:
源代码编码是gb2312时的htm,l在使用ajax发送时,假设是post方式,data中要把gb2312编码的中文,使用uriencodecomment编码成utf8编码后,注意,无论源代码是gb2312还是utf-8,使用它编码都是得到utf-8的uri编码,所以在php边要decodeuri解码,解码后它还是utf-8来的,如果php源代码是gb2312,那么就需要用iconv反utf-8转成gb2312;如源文件是utf-8就无需转码;解码uri后直接使用;
相关文章推荐
- php ajax 中文乱码问题解决办法(接收发送)utf-8 GBK GB2312
- PHP 发送UTF-8编码中文邮件标题乱码问题解决
- php ajax 中文乱码问题解决办法(接收发送)
- php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
- utf-8和gb2312乱码问题,延伸至中文编码乱码问题的解决(留坑以后有时间挖)
- utf-8 编码的url gb2312编码接收 乱码问题 解决
- [转]结合PHP实例谈谈如何解决jQuery.ajax提交GB2312或GBK编码中文乱码问题
- 中文乱码问题 ? 原因:JSP中默认使用iso-8859-1字符编码方式,不支持中文 ? 常见的支持中文的编码方式:gb2312(常用简体汉字)、gbk(简体和繁体汉字)、utf-8 ? 解决中文乱码
- PHP发送UTF-8编码中文邮件标题乱码的解决
- php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
- utf-8和gb2312乱码问题,延伸至中文编码乱码问题的解决(留坑以后有时间挖)
- tomcat 设置UTF编码 解决中文接收乱码问题
- PHP发送UTF-8编码中文邮件标题乱码的解决
- PHP字符串截取函数(解决中文乱码问题!支持UTF-8和GB2312)
- 解决全局utf-8编码下asp.net接收gb2312乱码的问题
- ajax+php $.post()中文乱码解决办法(utf-8 ---> gb2312)
- php中json_encode处理gbk与gb2312中文乱码问题的解决方法
- php+AJAX传送中文会导致乱码的问题的解决方法
- dojo+JBoss7设置URI编码为UTF-8,解决传参中文乱码问题
- PHP页面转UTF-8中文编码乱码的解决办法