Solution: 1. All data use utf-8 encoding uniformly, including database encoding, php encoding and front-end encoding; 2. Use json_encode(), urlencode() to encode each character separately, and then use The urldecode() function performs decoding and returns the value.
Recommended: "PHP Video Tutorial"
In php, after extracting data from the database, generally we will Extract multiple rows of data at one time. If the front-end js uses ajax to interact with the back-end, php can only echo one data, but we have multiple data, so only one array can be passed. This uses the json_encode() function. , the json_encode() function means to convert 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 enclosed in [] square brackets, and the arrays inside are enclosed in {} braces, but it is still garbled.
For the garbled code problem, there are two methods,
Method 1: All data are encoded in utf-8 uniformly, including encoding from the database. PHP coding and front-end coding.
Method 2: Use the following 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"}]
For more programming-related knowledge, please visit: Introduction to Programming! !
The above is the detailed content of How to solve the Chinese garbled code in php ajax?. For more information, please follow other related articles on the PHP Chinese website!