解決策: 1. すべてのデータは、データベース エンコード、php エンコード、フロントエンド エンコードを含む utf-8 エンコードを均一に使用します; 2. json_encode()、urlencode() を使用して各文字を個別にエンコードし、次に使用しますurldecode() 関数はデコードを実行し、値を返します。
推奨: 「PHP ビデオ チュートリアル 」
php では、データベースからデータを抽出した後、通常、一度に複数行のデータを抽出します。フロントエンド js が ajax を使用してバックエンドと対話する場合、php は 1 つのデータのみをエコーできますが、複数のデータがあるため、渡すことができる配列は 1 つだけです。これは json_encode を使用します()関数。json_encode()関数はデータをjsonデータに変換することを意味します。
php 配列の変換方法を見てみましょう:
まず、php で 2 つの配列を作成します。1 つは中国語を含み、もう 1 つは数字または英語を含み、最後に出力を見てみましょう。アイデア: 関連する値はより直感的です
$gg=array('a'=>'中国','b'=>'日本','c'=>'美国','d'=>'加拿大','e'=>'法国'); $yy=array('f'=>'6','g'=>'7','h'>='8','i'=>'tom','j'=>'kevin');
配列の 1 つだけを出力します:
echo $json=json_encode($gg);
出力結果は次のとおりです
{"a":"\u4e2d\u56fd","b":"\u65e5\u672c","c":"\u7f8e\u56fd","d":"\u52a0\u62ff\u5927","e":"\u6cd5\u56fd"}
両方に中かっこがあります
2 つの配列を 1 つの配列に入れて同時に出力します。echo $json=json_encode(array($gg,$yy));
コード文字化けの問題には 2 つの方法があります。
方法 1: エンコーディングを含め、すべてのデータを一律に utf-8 でエンコードするデータベースからの PHP コーディングとフロントエンド コーディング。
方法 2: 次の関数を使用して各文字を個別にエンコードします: (一部の記号はエスケープに失敗しているようです。そのため、この方法の使用はお勧めできません)
[{"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"}]
これら 2 つの関数を使用した後の出力結果は次のとおりです: 」を参照してください。 ! 以上がphp ajaxで中国語の文字化けコードを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。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--;
}