PHP的json_encode中的西里尔字符

前端之家收集整理的这篇文章主要介绍了PHP的json_encode中的西里尔字符前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用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个字符.有没有办法获取键/值对而不是编码的原始字符?

我在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)

猜你在找的PHP相关文章