ホームページ >バックエンド開発 >PHPの問題 >PHPのJSONデコードで中国語が文字化けした場合の対処法

PHPのJSONデコードで中国語が文字化けした場合の対処法

藏色散人
藏色散人オリジナル
2020-07-18 10:22:414981ブラウズ

php json デコード文字化けの解決策: まず、JSON 処理の前に、文字を UTF8 形式に変換し、次にバックグラウンドの PHP ページで「json_encode」を使用して、PHP 内の配列配列を JSON 文字列に変換できます。

PHPのJSONデコードで中国語が文字化けした場合の対処法

PHP json_encode 中国語文字化けの解決策

多くの人が Ajax を使用して、私が持っているバックグラウンドの PHP ページと対話すると思います。全員が漢字化けの問題に遭遇しました。 JSON は軽量なデータ交換形式として非常に人気がありますが、バックエンドの対話として PHP を使用すると、中国語の文字化けの問題が発生しやすくなります。

JSON は js と同じです。クライアントの文字は UTF8 の形式で処理されます。つまり、送信および受信のデータ形式として JSON を使用する場合、文字は UTF8 でエンコードされます。エンコードやデータベースのエンコードがUTF8を使用していない場合、中国語の文字化けが非常に発生しやすくなります。解決策は当然、js または PHP で JSON データを処理するときに UTF8 を使用することです。

PHP5.2 以降では、組み込み関数として json_encode が使用されており、Web サイト作成者にとって非常に便利ですが、json_encode は UTF8 エンコードのみをサポートしていることに注意する必要があります。中国語の文字化けやnull値が表示されます。

解決策は次の 2 つのステップに分かれています。

Step1

JSON を処理するときに文字が UTF8 でエンコードされていることを確認します。具体的には、データベース エンコーディングとページ エンコーディングの両方を UTF8 に変更できます。もちろん、gbk エンコーディングを使用したい場合は、JSON 処理の前に文字を UTF8 に変換できます。 PHP には次のメソッドがあります。

<?php  
     $data="JSON中文";  
     $newData=iconv("GB2312","UTF-8//IGNORE",$data);  
     echo $newData;  
     //ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符都不会被保存。  
     //或是("GB2312","UTF-8",$data);  
?>

Step2

バックグラウンド PHP ページ (ページ UTF-8 にエンコードされているか、文字が UTF-8 に変換されています) json_encode を使用して、PHP の配列配列を JSON 文字列に変換します。例:

<?php  
    $testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);  
    echo json_encode($testJSON);  
?>

出力結果を次のように表示します:

{“name”:”\u4e2d\u6587\u5b57\u7b26\u4e32″,”value”:”test”}

UTF8 でエンコードされた文字が使用されていても、json_encode を使用すると中国語の文字化けが発生することがわかります。解決策は、json_encode を使用する前に関数 urlencode() で文字を処理し、次に json_encode を使用して、結果を出力するときに関数 urldecode() を使用して文字を変換することです。詳細は次のとおりです。

<?php  
    $testJSON=array(&#39;name&#39;=>&#39;中文字符串&#39;,&#39;value&#39;=>&#39;test&#39;);  
    //echo json_encode($testJSON);  
    foreach ( $testJSON as $key => $value ) {  
        $testJSON[$key] = urlencode ( $value );  
    }  
    echo urldecode ( json_encode ( $testJSON ) );  
?>

出力結果を次のように確認します。

{“name”:”中文字符串”,”value”:”test”}

この時点で、漢字は正常に出力されています。 json_encode を自由に使用してください。このようにすると、フロントエンド JavaScript で Ajax が eval を受信したときに、PHP バックグラウンドで出力される JSON 文字列が中国語で文字化けすることはありません。これは、js も JSON 形式のデータを PHP と同様の UTF8 形式で処理するためです。 PHP ページを受信します。JSON 文字列は問題を引き起こしません。

推奨: 「PHP チュートリアル

以上がPHPのJSONデコードで中国語が文字化けした場合の対処法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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