Home  >  Article  >  Backend Development  >  What should I do if my php application ajax returns garbled characters?

What should I do if my php application ajax returns garbled characters?

coldplay.xixi
coldplay.xixiOriginal
2020-07-11 14:49:571983browse

Solution to the garbled code returned by php application ajax: 1. Convert the received data back to GBK, the code is [iconv(utf-8,'gb2312'$_POST[Data])]; 2 , use JSON to transmit, the code is [$json_string=JSON($data)].

What should I do if my php application ajax returns garbled characters?

Solution to the garbled code returned by php application ajax:

1. Submit data from front-end JS to In the background situation

When AJAX data is transmitted, whether it is directly using the underlying xmlHttprequest or using jQuery's ajax for data transmission! ajax will use utf-8 to encode and send!

If our page is UTF-8, there is no problem! The Chinese data passed will not be garbled!

If it is GB2312, the problem will arise! GBK is converted by UTF-8 and sent to the background. At this time What is received directly in the background is garbled!

Solution: When the background language is PHP

iconv('utf-8','gb2312',$_POST['Data']);

The principle is very simple:The background is directly The reception is utf-8, and the pages are all GBK, then just convert the received data back to GBK!

At this time, just do the database operation! Store it in the database They must be normal Chinese characters!

2. When the background page reads that the data in the database contains Chinese characters, and then passes it back to the JS frontend

The PHP page reads normal Chinese characters from the database and wants to send them back through AJAX~

If it is passed back, the data will be sent back directly in the form of a string without any processing! This is no problem ! Everything is normal when Chinese is displayed on the front page!

But we generally need to package the background data! Otherwise, the data received by the front desk will be difficult to process!

If it is PHP! Then We now generally use JSON for transmission! In this way, the data passed to the front-end JS will be very easy to unpack and operate!

When performing json conversion operations in the PHP background, the problem arises!

When converting json, you will find that the Chinese read from the database appears NULL or other abnormal situations. This is because JSON only escapes encoding! We don’t care what encoding it escapes!

Anyway, JSON When converting to Chinese, garbled characters appear~~

The solution is as follows:

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);

After these processes, you will find that the Chinese characters read from the database by the background PHP are successfully converted into json format and Chinese It shows that everything is normal!

Of course, the data received by the front desk at this time is in JSON format and Chinese characters are also normal!

Related learning recommendations:PHP programming from entry to proficient

The above is the detailed content of What should I do if my php application ajax returns garbled characters?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn