已解决了ajax(源文件编码gb2312)发送+php接收(源文件编码gb2312)中文乱码问题(utf-8也通用)

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后直接使用;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值