• 技术文章 >后端开发 >PHP问题

    如何解决ajax php 中文乱码

    藏色散人藏色散人2020-11-30 15:48:41原创305

    ajax php中文乱码的解决办法:1、将所有数据统一使用utf-8编码;2、使用“function JSON($array) {}”和“arrayRecursive”两个函数,对每个字符分别编码即可。

    本教程操作环境:windows10系统、php5.6,本文适用于所有品牌的电脑。

    推荐:《PHP视频教程

    php使用ajax中文乱码问题

    在php中,从数据库提取数据之后,一般我们会一次提取多行数据,如果前端的js使用的是ajax与后端交互的话,php只能echo一个数据,但是我们的数据有多个,所以只能一个数组过去,这就使用到了json_encode()函数,json_encode()函数的意思是把数据转化成json数据。

    我们看一下如何转换,

    php数组:

    首先我们在php里新建两个数组,一个包含中文,另一个包含数字或英文,最后输出看一下。 主意:关联数值更直观一点

    $gg=array('a'=>'中国','b'=>'日本','c'=>'美国','d'=>'加拿大','e'=>'法国');
    $yy=array('f'=>'6','g'=>'7','h'>='8','i'=>'tom','j'=>'kevin');

    只输出其中一个数组:

    echo $json=json_encode($gg);

    输出结果如下

    {"a":"\u4e2d\u56fd","b":"\u65e5\u672c","c":"\u7f8e\u56fd","d":"\u52a0\u62ff\u5927","e":"\u6cd5\u56fd"}

    两边分别是大括号,而且乱码

    把两个数组同时放在一个数组同时输出

    echo $json=json_encode(array($gg,$yy));

    输出结果如下:

    [{"a":"\u4e2d\u56fd","b":"\u65e5\u672c","c":"\u7f8e\u56fd","d":"\u52a0\u62ff\u5927","e":"\u6cd5\u56fd"},{"f":"6","g":"7","0":true,"i":"tom","j":"kevin"}]

    我们可以看到,数组里的数组经过json格式之后,数据装在【】中括号里,里面的数组又分别在{}大括号里,但是还是乱码。

    针对乱码问题,有两个方法,

    方法一:所有数据统一使用utf-8编码,包括从数据库编码,php编码和前端编码。

    方法二:使用下面两个函数,对每个字符分别编码:(有的符号貌似转义不成功,不提倡使用该方法)

    function JSON($array) { 
        arrayRecursive($array, 'urlencode', true); 
        $json = json_encode($array); 
        return urldecode($json); 
    }
    function arrayRecursive(&$array, $function, $apply_to_keys_also = false){ 
        static $recursive_counter = 0; 
        if (++$recursive_counter > 1000) { 
            die('possible deep recursion attack'); 
        } 
        foreach ($array as $key => $value) { 
            if (is_array($value)) { 
                arrayRecursive($array[$key], $function, $apply_to_keys_also); 
            } else { 
                $array[$key] = $function($value); 
            }                                        
            if ($apply_to_keys_also && is_string($key)) { 
                $new_key = $function($key); 
                if ($new_key != $key) { 
                    $array[$new_key] = $array[$key]; 
                    unset($array[$key]); 
                } 
            } 
        } 
        $recursive_counter--; 
    }


    使用这两个函数之后,输出结果为:

    [{"a":"中国","b":"日本","c":"美国","d":"加拿大","e":"法国"},{"f":"6","g":"7","0":"1","i":"tom","j":"kevin"}]

    以上就是如何解决ajax php 中文乱码的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:ajax php 乱码
    上一篇:php 中文截取乱码怎么办 下一篇:linux怎么修改php.ini
    大前端线上培训班

    相关文章推荐

    • 如何解决php js乱码问题• 怎么解决php curl 乱码问题• php读取数据乱码怎么办• 如何解决bootstrap乱码问题

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网