現在の位置: ホーム> 最新記事一覧> PHPカスタム再帰関数JSON関数に配列を実装します(GBKエンコーディングをサポート)

PHPカスタム再帰関数JSON関数に配列を実装します(GBKエンコーディングをサポート)

gitbox 2025-07-28

導入

PHP開発では、データの相互作用またはフロントエンドのデータのストレージを有効にするために、JSON形式の文字列に配列を変換する必要があることがよくあります。 PHPにはJSON_Encode関数が組み込まれており、配列をJSON形式に変換できますが、デフォルトではUTF-8エンコードのみをサポートしています。他のエンコーディング(GBKなど)をサポートするには、Array to JSON関数を実装するために再帰関数をカスタマイズする必要があります。

準備

PHPバージョンの要件

PHPがバージョン5.4で始まるため、PHPバージョンが5.4を超えていることを確認してください。JSON_ENCODE関数は、より多くの関数の構成を容易にする2番目のパラメーター$オプションを提供します。

mbstring拡張機能をインストールします

GBKエンコーディングをサポートするには、mbstring拡張機能をインストールする必要があります。この拡張機能は、マルチバイト文字列の処理機能を提供します。次のコマンドを使用してインストールできます。

 sudo apt-get update
sudo apt-get install php-mbstring

カスタム再帰関数

次に、JSON関数に配列を実装するためのカスタム再帰関数を書き込みます。以下は、関数の実装です。

 /**
 * 配列変換JSONフォーマット文字列(サポートGBKコーディング)
 * @param array $array 変換する配列
 * @return string JSONフォーマット文字列
 */
function json_encode_gbk($array) {
    $array = array_map('urlencode_gbk', $array);
    $json = json_encode($array);
    return urldecode_gbk($json);
}

/**
 * 文字列を実行しますGBKコーディング
 * @param string $str 待コーディング的字符串
 * @return string コーディング后的字符串
 */
function urlencode_gbk($str) {
    return urlencode(mb_convert_encoding($str, 'GBK', 'UTF-8'));
}

/**
 * 文字列を実行しますGBKデコード
 * @param string $str 待デコード的字符串
 * @return string デコード后的字符串
 */
function urldecode_gbk($str) {
    return mb_convert_encoding(urldecode($str), 'UTF-8', 'GBK');
}

上記のコードでは、json_encode_gbk関数は、最初にarray_mapを介してarrayの各要素でurlencode_gbk処理を実行し、json_encode関数を使用してjson形式の文字列に配列を変換します。最後に、urldecode_gbk関数はGBKからUTF-8形式に変換します。

使用の例

中国語を含む配列があるとします:

 $array = array(
    '名前' => 'チャン・サン',
    '年' => 25,
    '性別' => '男'
);

json_encode_gbk関数を呼び出すことにより、配列をJSON形式に変換できます。

 $json = json_encode_gbk($array);
echo $json;

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

 {
    "名前": "チャン・サン",
    "年": 25,
    "性別": "男"
}

上記のように、漢字はUnicodeエンコードに正常に変換されています。

要約します

カスタム再帰関数を通じて、JSON関数への配列を正常に実装し、GBKエンコーディングをサポートしました。実際の開発では、配列をJSON形式に変換し、他のエンコーディングをサポートする必要がある場合は、同様の方法を使用して拡張できます。

カスタム再帰関数の中心的なアイデアは、変換前に配列に文字列をエンコードし、変換後にデコードすることです。これにより、文字列が異なるエンコーディング間で正しく変換されることが保証されます。

この記事が、PHPでJSON関数に配列を実装する方法を理解するのに役立つことを願っています。