ホームページ  >  記事  >  バックエンド開発  >  phpのjson_encodeがGB2312エンコードをサポートしていない問題の解決策

phpのjson_encodeがGB2312エンコードをサポートしていない問題の解決策

黄舟
黄舟オリジナル
2017-11-15 15:51:072359ブラウズ

前の記事では、phpのjson_encodeでの中国語のUNICODEトランスコーディングの問題を解決する方法を紹介しました。今日は引き続き、phpのjson_encodeがGB2312エンコードをサポートしていない問題を紹介します。json_encode()を使用します。 in php 組み込み関数 (php > 5.2) php のデータを他の言語に転送して使用することができます。この関数の機能は、数値を json データ保存形式に変換することです。

は次のとおりです:

$arr = array('Name'=>'希亚', 'Age'=>20); 
$jsonencode = json_encode($arr); 
echo $jsonencode;

実行結果:

{"Name":null,"Age":20}

json_encode 関数の中国語は null としてエンコードされています。フロントエンドと緊密に統合するために、Json は非常に単純です。 utf-8 エンコーディングだと思います。 フロントエンド

JavaScript も utf-8 の理由です。解決策は次のとおりです:

$array = array (     
'title'=>iconv('gb2312','utf-8','这里是中文标题'),     
'body'=>'abcd...' );  
echo json_encode($array);

操作結果:

{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."}

配列内のすべての中国語文字が欠落しているか、json_encode の後に u2353 などが表示されます。

解決策は、urlencode() 関数を使用して以下を処理することです。json_encode の前に、urlencode() を使用してすべての配列のすべての内容を処理し、次に json_encode() を使用してそれを json

string に変換します。 urldecode() エンコードされた中国語を元に変換します。

サンプルプログラムは次のとおりです:

/************************************************************** 
 * 
 *    使用特定function对数组中所有元素做处理 
 *    @param    string    &$array        要处理的字符串 
 *    @param    string    $function    要执行的函数 
 *    @return boolean    $apply_to_keys_also        是否也应用到key上 
 *    @access public 
 * 
 *************************************************************/ 
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--; 
} 
 
/************************************************************** 
 * 
 *    将数组转换为JSON字符串(兼容中文) 
 *    @param    array    $array        要转换的数组 
 *    @return string        转换得到的json字符串 
 *    @access public 
 * 
 *************************************************************/ 
function JSON($array) { 
    arrayRecursive($array, 'urlencode', true); 
    $json = json_encode($array); 
    return urldecode($json); 
} 
 
$array = array('Name'=>'希亚', 'Age'=>20); 
 
echo JSON($array);

概要:

この記事は、コードケースを通じて、php での json_encode 中国語 UNICODE トランスコーディングの問題を解決します。友人が同じ問題に遭遇した場合、簡単に解決できると思います。 !


関連する推奨事項:

php

の json_encode() 関数の詳細な説明 phpにおけるjson_encode中国語UNICODEトランスコーディングの問題の解決策


php json_encodeの使用例の紹介

以上がphpのjson_encodeがGB2312エンコードをサポートしていない問題の解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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