php Ajax 送信時の中国語文字化けの解決策: 1. データベース エンコーディング、php エンコーディング、フロントエンド エンコーディングを含むすべてのデータに utf-8 エンコーディングを使用します; 2. それぞれをエンコードする「JSON」と「arrayRecursive」関数を使用しますキャラクターは別途。
#この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、Dell G3 コンピューター。
php では、ajax を使用した中国語の文字化けの問題が発生します。
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));出力結果は次のとおりです。
[{"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"}]配列内の配列は json 形式で、データは [] にインストールされます。括弧内の配列は {} 中括弧内にありますが、依然として文字化けしています。 コード文字化けの問題には、2 つの方法があります。 方法 1: すべてのデータは、データベースからのエンコード、PHP エンコード、フロントエンド エンコードを含む UTF-8 エンコードを使用します。 方法 2: 次の 2 つの関数を使用して各文字を個別にエンコードします: (一部の記号はエスケープに失敗するようですので、この方法の使用はお勧めできません)
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--; }
#これら 2 つの関数を使用した後の出力結果は次のようになります:
[{"a":"中国","b":"日本","c":"美国","d":"加拿大","e":"法国"},{"f":"6","g":"7","0":"1","i":"tom","j":"kevin"}]
推奨学習: "
PHP ビデオ チュートリアル
以上がphp ajaxで中国語の文字化けが送信された場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。