大橙子网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
ajax php中文乱码的解决办法:1、将所有数据统一使用utf-8编码;2、使用“function JSON($array) {}”和“arrayRecursive”两个函数,对每个字符分别编码即可。
创新互联是一家集网站建设,成安企业网站建设,成安品牌网站建设,网站定制,成安网站建设报价,网络营销,网络优化,成安网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
推荐:《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"}]