Home > Article > Backend Development > How to solve php ajax garbled problem
php Ajax garbled solution: 1. Use utf-8 encoding for all data; 2. Use the two functions "JSON" and "arrayRecursive" to encode each character separately.
The operating environment of this article: windows7 system, PHP7.1 version, DELL G3 computer
php uses ajax Chinese garbled problem
In php, after extracting data from the database, we usually extract multiple rows of data at a time. If the front-end js uses ajax to interact with the back-end, php can only echo one data, but our There is multiple data, so only one array can be used. This uses the json_encode() function. The json_encode() function means to convert the data into json data.
Let’s take a look at how to convert,
php array:
First we create two arrays in php, one contains Chinese, the other contains numbers or English, and finally outputs take a look. Idea: The associated values are more intuitive
$gg=array('a'=>'中国','b'=>'日本','c'=>'美国','d'=>'加拿大','e'=>'法国'); $yy=array('f'=>'6','g'=>'7','h'>='8','i'=>'tom','j'=>'kevin');
Only output one of the arrays:
echo $json=json_encode($gg);
The output result is as follows
{"a":"\u4e2d\u56fd","b":"\u65e5\u672c","c":"\u7f8e\u56fd","d":"\u52a0\u62ff\u5927","e":"\u6cd5\u56fd"}
There are curly brackets on both sides and garbled characters
Put two arrays into one array and output them at the same time
echo $json=json_encode(array($gg,$yy));
The output results are as follows:
[{"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"}]
We can see that after the arrays in the array are formatted in json, the data is installed in [] In the brackets, the arrays inside are in {} braces, but they are still garbled.
For the garbled code problem, there are two methods,
Method 1: All data uses UTF-8 encoding, including encoding from the database, PHP encoding and front-end encoding.
Method 2: Use the following two functions to encode each character separately: (Some symbols seem to be escaped unsuccessfully, so the use of this method is not recommended)
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--; }
#After using these two functions, the output result is:
[{"a":"中国","b":"日本","c":"美国","d":"加拿大","e":"法国"},{"f":"6","g":"7","0":"1","i":"tom","j":"kevin"}]
Recommended learning: "
PHP Video TutorialThe above is the detailed content of How to solve php ajax garbled problem. For more information, please follow other related articles on the PHP Chinese website!