我正在尝试使用php的函数json_encode将Cyrillic UTF-8数组编码为JSON字符串.示例代码如下所示:
'?????', '???' => '?????' ); $str = json_encode($arr); echo $str; ?>
它工作正常,但脚本的结果表示为:
{"\u0435\u0434\u043d\u043e":"\u043f\u044a\u0440\u0432\u0438","\u0434\u0432\u0435":"\u0432\u0442\u043e\u0440\u0438"}
每个西里尔字符有6个字符.有没有办法获取键/值对的原始字符而不是编码的?
你不能在这里使用JSON_UNESCAPED_UNICODE常量吗?
我在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)
$str = json_encode($arr, JSON_UNESCAPED_UNICODE);
使用此解决方案对PHP 5.5的拉丁字母和西里尔字母都有效