• php与ajax交互中文乱码(字符串转化)


    一.从后台传过来的json不做处理,前端result.name这样调用回乱码。应该使用urldecode将jsonencod转码

    注意json只接受utf-8编码的字符,所以json_encode()的参数必须是utf-8编码,否则会得到空字符或者null。

    后台:

    if(!empty($chatData)){

    echo urldecode(json_encode($chatData));

    1. <?php  
    2.     $testJSON=array('name'=>'中文字符串','value'=>'test');  
    3.     //echo json_encode($testJSON);  
    4.     foreach ( $testJSON as $key => $value ) {  
    5.         $testJSON[$key] = urlencode ( $value );  
    6.     }  
    7.     echo urldecode ( json_encode ( $testJSON ) );  
    8. ?>  

    查看输出结果为:

    {“name”:”中文字符串”,”value”:”test”}

     二.前台ajax传递至后台

    1.

    $.ajax({
    url:url,
    type:"POST",
    data:data,
    contentType:"application/x-www-form-urlencoded; charset=utf-8",
    dataType:"json",
    success: function(){
    ...
    }
    })

    2.使用:encodeURIComponent 做字符转换

    解决方法
    1,保持编码的统一,包括文件编码,数据库编码,网页content-type编码
    检查一下<meta http-equiv=”content-type” content=”text/html; charset=UTF-8″ />
    建议中文都是用UTF-8,使用gbk/gb2312有可能会出现乱码
    2,使用post来发送而不是get
    get方法是会通过链接来传递参数,而且会自动urlEncode(编码),而各个浏览器编码的方式可能不太一样。使用post可以避免这种情况。
    3,通过在js前端escape编码再发送,然后后台解码取得数据( decodeURI()或者decodeURIComponent() )
    decodeURIComponent() 函数可对 encodeURIComponent() 函数编码的 URI 进行解码。


    4,在全局设定contentType,指定编码
    因为jquery ajax是使用utf-8来编码发送数据的,ie在发送时却没加上charset=utf-8,从而导致乱码(IE默认使用iso-8859-1编码)

    实例1:

    <script type="text/javascript">
      var test1="http://www.w3school.com.cn/My first/"
      document.write(encodeURIComponent(test1)+ "<br />")
      document.write(decodeURIComponent(test1))
    </script>

    输出:

    http%3A%2F%2Fwww.w3school.com.cn%2FMy%20first%2F
    http://www.w3school.com.cn/My first/

    实例2:

    .ajax({
    type:"get",
    cache:false,
    contentType:"application/x-www-form-urlencoded:charset=UTF-8",
    url:"ajaxpage.aspx?t=smrz&name="+escape(name)+"&zjtype="+escape(type)+"&zjnum="+escape(zjnum)+"",
    dataType:"json",
    success:function(data){
    alert(data.info);
    }
    })

    三.顶层函数(全局函数)

    函数描述
    decodeURI() 解码某个编码的 URI。
    decodeURIComponent() 解码一个编码的 URI 组件。
    encodeURI() 把字符串编码为 URI。
    encodeURIComponent() 把字符串编码为 URI 组件。
    escape() 对字符串进行编码。
    eval() 计算 JavaScript 字符串,并把它作为脚本代码来执行。
    getClass() 返回一个 JavaObject 的 JavaClass。
    isFinite() 检查某个值是否为有穷大的数。
    isNaN() 检查某个值是否是数字。
    Number() 把对象的值转换为数字。
    parseFloat() 解析一个字符串并返回一个浮点数。
    parseInt() 解析一个字符串并返回一个整数。
    String() 把对象的值转换为字符串。
    unescape() 对由 escape() 编码的字符串进行解码。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    CentOS下安装SecureCRT的sz/rz工具包
    MyISAM InnoDB 区别
    PHP中extract()函数的妙用
    卸载rpm包遭遇error: specifies multiple packages
    获取textarea的光标位置,并插入数据
    如何使页面中的INPUT按指定的顺序移动焦点
    nginx 跑php时找不到文件报no input file specified.
    php高并发状态下文件的读写(fopen,fwrite,fread)
    gearman php 分布式搭建
    RPM包制作与实战
  • 原文地址:https://www.cnblogs.com/peng14/p/3631124.html
Copyright © 2020-2023  润新知