Home >Backend Development >PHP Tutorial >json_encode UTF-8 Chinese garbled problem in php, _PHP tutorial
Recently I have used json_encode in the interface code. I found on the Internet that json_encode encoding is set to UTF-8 Chinese and it will not work. Garbled code, it has been proven that this method is indeed effective, but I don’t know why, the code doesn’t work very well after using it for a period of time. The following is my own solution to json_encode. If you have a better method, please share it!
First type:
This is a simple code conversion, and then return the required array after urlcode
This is enough for my code.
The code is as follows Copy code
public static function encodeOperations ($array)
{
foreach ((array)$array as $key => $value) {
if (is_array($value)) {
encodeOperations($array[$key]);
} else {
$array[$key] = urlencode(mb_convert_encoding($value,'UTF-8','GBK'));
}
}
return $array;
}
Second type:
I saw this on the Internet, and there were comments saying that there will be infinite loop problems, but this is obviously very comprehensive, and after I tested it, it did happen. I post it here for reference only
The code is as follows Copy the code
/***************************************************** **********
*
* Use a specific function to process all elements in the array
* @param string &$array The string to be processed
* @param string $tocode encoded
* @param string $oldcode before encoding
* @param string $function The function to be executed
* @return boolean $apply_to_keys_also whether it is also applied to keys
* @return array $array Whether it is also applied to key
* @access public
*
************************************************* **************/
function encodeOperations (&$array, $function, $tocode=false,$oldcode=false,$apply_to_keys_also = false)
{
foreach ($array as $key => $value) {
(www.111cn.net)
if (is_array($value)) {
encodeOperations($array[$key], $function, $apply_to_keys_also);
} else {
if($tocode&&$oldcode) {
if(function_exists(mb_convert_encoding)) {
$value = mb_convert_encoding($value,$tocode,$oldcode);
}else{
return "error";
}
}
$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]);
}
}
}
return $array;
}
/****from:http://www.111cn.net/phper/31/66729.htm************************************ *******************************
*
* Convert array to JSON string (compatible with Chinese)
* @param array $array The array to be converted
* @return string converted json string
* @access public
*
************************************************* **************/
function JSON($array) {
arrayRecursive($array, 'urlencode', true);
$json = json_encode($array);
return urldecode($json);
}
If null is returned for Chinese, we need to convert the characters into uft8 or use urlencode to compile first.