PHP JSON 中国語エンコーディング
php を使用して配列を json 形式に変換し、jquery に渡すと、中国語は次のようになることがわかりました。奇妙なエンコーディング。そこで、インターネットで解決策を探したところ、多くの人が次の 2 つの関数を使用して解決していることがわかりました。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);}
$array[$key] = $function($value);
へーん、'$function' を渡されたパラメーター $function の値に置き換えてもう一度見てください
定義
function arrayRecursive(&$array, $function, $apply_to_keys_only = false ) で
$array[$key] = $function($value);
は
arrayRecursive($array, ' urlencode', true) を呼び出しますので、 $array[$key] = $function($value); ;
それは $array[$key] = urlencode($value); です。 。よし。 。渡されるパラメータです。 。私はローエンドです...
$array[$key] = $function($value) で
Call
arrayRecursive( $array, ' urlencode', true);
つまり $array[$key] = $function($value);
は $array[$key] = urlencode($value); ということのようですこれら 2 つの関数のうち、まず配列内の各値を urlen コード化し、次に json_encode を json 形式に変換し、最後に文字列を json 形式で URL デコードします。ありがとう。コードを見ても頭が回転しません
この関数は gbk でエンコードされたデータ用です
utf-8 データの場合、これを行う必要はありません