Heim  >  Artikel  >  Backend-Entwicklung  >  Was soll ich tun, wenn PHP Ajax chinesische verstümmelte Zeichen erhält?

Was soll ich tun, wenn PHP Ajax chinesische verstümmelte Zeichen erhält?

藏色散人
藏色散人Original
2021-09-14 11:17:032317Durchsuche

php ajax获取中文乱码的解决办法:1、执行“iconv('utf-8','gb2312',$_POST['Data']);)”代码;2、通过PHP从数据库读出中文字符并转成json格式即可。

Was soll ich tun, wenn PHP Ajax chinesische verstümmelte Zeichen erhält?

本文操作环境:windows7系统、PHP7.1版,DELL G3电脑

php ajax获取中文乱码怎么办?

PHP中AJAX应用中文乱码解决方法

web应用开发中经常出现中文乱码情况!

今天主要整理下思路:

出现乱码的大多数情况是我们进行AJAX时所遇到的!因为直接数据库读取是不会有任何编码上的问题的~

 

1.从前台JS提交数据到后台的情况下

AJAX数据时,不管是直接用底层xmlHttprequest还是用jQuery的ajax进行数据传递时!ajax都会使用utf-8进行编码后发送!

如果我们的页面是UTF-8那没有问题!传递过去的中文数据不会乱码!

如果是GB2312的话~问题就来了!GBK被UTF-8转换后发送到后台,这时后台直接接收到的已经乱码了!

(解决方法:后台语言为PHP的情况下,iconv('utf-8','gb2312',$_POST['Data']);)

原理很简单:后台直接接收是utf-8,而页面都是GBK,那只要把接收到的数据再重新转回为GBK就可以了!

这时再做数据库操作就可以了!存入数据库里的必定是正常的中文字符了!

 

2.后台页面读取到数据库里数据中含有中文字符,此时再回传到JS前台的情况下

PHP页面从数据库里读取到了正常的中文字符想通过AJAX再回传回去~

如果传递回去只是把数据不作任何处理直接以字符串的形式传回去!这是没有问题的!中文在前台页面上显示一切正常!

但后台数据我们一般是需要包装一下!不然前台接收到的数据会很难处理!

如果是PHP的话!那么我们现在一般用JSON进行传递!这样传递到前台JS的数据就会非常容易解开并操作!

在PHP后台进行json转换操作时,问题就来了!

json转换时会发现从数据库读取出来的中文又出现NULL或其它不正常的情况,这是因为JSON只转义encoding编码!咱也甭管他转义什么编码!

反正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--;
 }
 function JSON($array) {
     arrayRecursive($array, 'urlencode', true);
     $json = json_encode($array);
     return urldecode($json);
 }
$json_string=JSON($data);
//$obj = json_decode($json_string);
print_r($json_string);

 

经过这些处理后你会发现后台PHP从数据库读出来的中文字符成功的转成了json格式并且中文显示一切正常!

当然此时前台接收到的数据就是JSON格式的了并且中文字符也是正常!

 

好了~~就是这些思路~网上方法有很多!看得有点乱~主要是记住思路!

然后就看用什么函数用什么方法解决相关编码问题就可以了!

比较烦那种JS前台AJAX需要转码!后台再解码!有的还需要转两次!

目前我写的这些都是在PHP后台语言代码的情况下有效的.

前台即使是GBK也不用作任何转码操作,全部只在后台PHP代码里面作相关转换就可以了!!

推荐学习:《PHP视频教程

Das obige ist der detaillierte Inhalt vonWas soll ich tun, wenn PHP Ajax chinesische verstümmelte Zeichen erhält?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn