ホームページ >バックエンド開発 >PHPの問題 >PHPで漢字を含むJSON形式を配列に変換する方法

PHPで漢字を含むJSON形式を配列に変換する方法

PHPz
PHPzオリジナル
2023-04-20 09:08:13758ブラウズ

PHP は、Web アプリケーションの構築に使用される人気のあるサーバー側プログラミング言語です。 JSON (JavaScript Object Notation) は軽量のデータ交換形式です。人間が理解しやすく、機械が処理しやすいテキスト形式です。 PHP には JSON データを処理するための組み込み関数があり、JSON 形式を PHP 配列に変換する関数を提供します。ただし、JSONデータに漢字が含まれる場合は文字化けが発生します。この記事では、漢字を含むJSON形式をPHP配列に変換し、文字化けを解決する方法を紹介します。

  1. JSON 形式とは

JSON 形式は、JavaScript 言語の構文に基づく軽量のデータ交換形式ですが、他のプログラミング言語でも使用できます。 。 JSON はキーと値のペアで構成され、各キーと値のペアはカンマで区切られ、キーと値はコロンで区切られます。 JSON では配列とオブジェクトの両方を使用できます。以下は JSON 形式の例です。

{
    "name": "张三",
    "age": 25,
    "gender": "男",
    "hobbies": ["游泳", "唱歌", "阅读"],
    "address": {
        "province": "广东",
        "city": "深圳"
    }
}
  1. JSON から PHP 配列へ

PHP の json_decode 関数を使用して、JSON 形式を PHP 配列に変換できます。構文は次のとおりです:

mixed json_decode ( string $json [, bool $assoc = FALSE [, int $depth = 512 [, int $options = 0 ]]] )

このうち、パラメータ $json は JSON 形式の文字列、$assoc はオプションのパラメータで、値が TRUE の場合は連想配列が返され、そうでない場合は連想配列が返されます。オブジェクトが返されます。 $ Depth はオプションのパラメータで、再帰の最大深さを指定します。デフォルトは 512 です。 $options もオプションのパラメーターであり、JSON デコード オプションを指定します。デフォルトは 0 です。

JSON 形式を PHP 配列に変換する例を次に示します。

$json = '{"name": "张三", "age": 25, "gender": "男"}';
$arr = json_decode($json, true);
print_r($arr);

出力結果は次のとおりです。

Array
(
    [name] => 张三
    [age] => 25
    [gender] => 男
)
  1. 中国語文字を含む JSON 形式の処理

ただし、JSON データに漢字が含まれる場合は文字化けが発生します。これは、PHP がデフォルトで JSON を UTF-8 形式にエンコードし、UTF-8 では中国語の文字が 3 バイトを占めるためです。したがって、JSON データに中国語の文字が含まれている場合は、変換プロセス中に処理する必要があります。

PHP では、iconv 関数を使用してさまざまな文字セットを変換できます。 iconv 関数の構文は次のとおりです。

string iconv ( string $in_charset , string $out_charset , string $str )

このうち、$in_charset パラメータはソース文字セット、$out_charset パラメータはターゲット文字セット、$str パラメータは変換対象の文字列です。変換された。以下は、JSON 形式を PHP 配列に変換し、文字化けの問題を解決する例です:

$json = '{"name": "张三", "age": 25, "gender": "男"}';
$json = iconv('UTF-8', 'GBK//IGNORE', $json); // 将JSON转换为GBK格式
$arr = json_decode($json, true);
$arr = array_map(function($value) {
    return iconv('GBK', 'UTF-8//IGNORE', $value); // 将数组转换为UTF-8格式
}, $arr);
print_r($arr);

出力結果は次のとおりです:

Array
(
    [name] => 张三
    [age] => 25
    [gender] => 男
)

上記の例では、最初に iconv を使用します。 JSON形式の文字列をUTF-8からGBK形式に変換する関数です。次に、 json_decode 関数を使用して、JSON 形式を PHP 配列に変換します。最後に、array_map 関数を使用して、配列内の各値を GBK 形式から UTF-8 形式に変換します。

iconv 関数の使用に加えて、mb_convert_encoding 関数を使用して文字エンコーディングの変換を実行することもできます。 mb_convert_encoding 関数は、パラメータが若干異なることを除いて、iconv 関数に似ています。以下は、mb_convert_encoding 関数を使用した文字エンコード変換の例です。

$json = '{"name": "张三", "age": 25, "gender": "男"}';
$json = mb_convert_encoding($json, 'GBK', 'UTF-8'); // 将JSON转换为GBK格式
$arr = json_decode($json, true);
$arr = array_map(function($value) {
    return mb_convert_encoding($value, 'UTF-8', 'GBK'); // 将数组转换为UTF-8格式
}, $arr);
print_r($arr);

出力は前の例と同じです。

  1. 概要

PHP では、json_decode 関数を使用して JSON 形式を PHP 配列に変換できます。ただし、JSONデータに漢字が含まれる場合は文字化けが発生します。この問題を解決するには、iconv 関数または mb_convert_encoding 関数を使用して、JSON 形式を指定された文字セットに変換し、それを PHP 配列に変換します。このようにして、中国語の文字を含む JSON 形式を正しく処理できます。

以上がPHPで漢字を含むJSON形式を配列に変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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