ホームページ > バックエンド開発 > PHPチュートリアル > PHP の json_encode は中国語のソリューションをサポートします

PHP の json_encode は中国語のソリューションをサポートします

WBOY
リリース: 2016-06-20 13:04:56
オリジナル
1175 人が閲覧しました

php (php > 5.2) で json_encode() 組み込み関数を使用すると、php のデータを転送して他の言語で使用できるようになります。

この関数の機能は、数値を json データ保存形式に変換することです。

$arr= array
       (
          'Name'=>'悟空',
          'Age'=>5000
       );
  
$jsonencode= json_encode($arr);
echo$jsonencode;
ログイン後にコピー

プログラムの実行結果は次のとおりです:

{"Name":null,"Age":5000}
ログイン後にコピー

Google で検索すると、json_encode 関数内の漢字は null としてエンコードされます。これは、フロントエンドと緊密に統合するために、Json が utf-8 エンコードのみをサポートしているためだと思います。 -end Javascript も utf-8 です。

$array= array
    (
        'title'=>iconv('gb2312','utf-8','这里是中文标题'),
        'body'=>'abcd...'
    );
  
echojson_encode($array);
ログイン後にコピー

このプログラムを実行した結果は次のようになります:

{"title":"\u8fd9\u91cc\u662f\u4e2d\u6587\u6807\u9898","body":"abcd..."} 
ログイン後にコピー

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

解決策は、urlencode() 関数を使用して以下を処理することです。json_encode の前に、urlencode() を使用してすべての配列の内容を処理し、次に json_encode() を使用してそれを JSON 文字列に変換し、最後に使用します。 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'=>5000
           );
     
     
    echo JSON($array);
ログイン後にコピー

今回は成功しました。結果は次のとおりです:

{"名前":"悟空","年齢":"5000"}


関連ラベル:
php
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート