19

PHPの関数json_encodeを使用して、キリル文字のUTF-8配列をJSON文字列にエンコードしようとしています。サンプル コードは次のようになります。

<?php
  $arr = array(
     'едно' => 'първи',
     'две' => 'втори'
  );
  $str = json_encode($arr);
  echo $str;
?>

正常に動作しますが、スクリプトの結果は次のように表されます。

{"\u0435\u0434\u043d\u043e":"\u043f\u044a\u0440\u0432\u0438","\u0434\u0432\u0435":"\u0432\u0442\u043e\u0440\u0438"}

これにより、キリル文字ごとに 6 文字になります。エンコードされたものではなく、キーと値のペアの元の文字を取得する方法はありますか?

4

8 に答える 8

26

ここでJSON_UNESCAPED_UNICODE定数を使用できませんか?

于 2011-09-23T12:12:46.953 に答える
10
$str = json_encode($arr, JSON_UNESCAPED_UNICODE);

このソリューションの使用は、PHP 5.5 を使用して、ラテン文字とキリル文字で機能しました。

于 2014-08-14T05:49:01.190 に答える
10

Zendフレームワークのコードでこれを見つけました:

http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Json/Decoder.php

関数 decodeUnicodeString を見てください (行 474 ):

 /**
     * Decode Unicode Characters from \u0000 ASCII syntax.
     *
     * This algorithm was originally developed for the
     * Solar Framework by Paul M. Jones
     *
     * @link   http://solarphp.com/
     * @link   http://svn.solarphp.com/core/trunk/Solar/Json.php
     * @param  string $value
     * @return string
     */
    public static function decodeUnicodeString($chrs)

これは静的であり、簡単に抽出できます。次の行を置き換えるだけです。

490:           $utf8 .= self::_utf162utf8($utf16);

と:

490:           $utf8 .= mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');

理想的な解決策ではありませんが、私にとってはうまくいきました:o)

于 2009-08-04T18:28:57.693 に答える
2

PHP のビルトインは でjson_encodeのみ動作しUTF-8、エンコーディングに関して動作を微調整するための追加機能は他にないようです。

Googleで、php json ライブラリの完全に公平でバランスの取れた比較を見つけました。それはあなたを助けるかもしれません。可能であれば、ここにある表に基づいて別のライブラリを試すこともできます。json.orgに一覧表示されている追加の PHP ライブラリを試すことができます。

于 2009-01-04T09:12:23.273 に答える
2

http://pear.php.net/pepr/pepr-proposal-show.php?id=198で動作しました

JSON.php の厄介なバイパスで、行 298..

$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
$c += 1;
//$utf16 = $this->utf82utf16($char);
//$ascii .= sprintf('\u%04s', bin2hex($utf16));
$ascii .= $char;

ありがとう!

于 2009-01-04T09:58:15.040 に答える
1

私はトルコ語についても同じ問題を扱っていました...実際、ブラウザーがそれらをJSコードブロックに自動的に変換することは何もする必要はありません。したがって、それらをデコードする最も簡単な方法は、javascript を使用して取得することです。(アヤックスなど)

非ASCII文字を使用したJsonエンコード?

于 2012-11-15T15:25:16.277 に答える