ホームページ >バックエンド開発 >PHPの問題 >php ajaxで中国語の文字化けコードを解決するにはどうすればよいですか?

php ajaxで中国語の文字化けコードを解決するにはどうすればよいですか?

青灯夜游
青灯夜游オリジナル
2020-11-06 10:54:421802ブラウズ

解決策: 1. すべてのデータは、データベース エンコード、php エンコード、フロントエンド エンコードを含む utf-8 エンコードを均一に使用します; 2. json_encode()、urlencode() を使用して各文字を個別にエンコードし、次に使用しますurldecode() 関数はデコードを実行し、値を返します。

php ajaxで中国語の文字化けコードを解決するにはどうすればよいですか?

推奨: 「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));
出力結果は次のとおりです。配列内の配列が json でフォーマットされた後、データは [] 角​​括弧で囲まれ、内部の配列は {} 中括弧で囲まれていることがわかりますが、依然として文字化けしています。

コード文字化けの問題には 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 つの関数を使用した後の出力結果は次のとおりです:

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--; 
}
プログラミング関連の知識の詳細については、「

プログラミング入門

」を参照してください。 !

以上がphp ajaxで中国語の文字化けコードを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。