我正在尝试使用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个字符。有没有办法获得键/值对的原始字符,而不是编码的字符?
发布于 2011-09-23 20:12:47
这里不能使用JSON_UNESCAPED_UNICODE常量吗?
发布于 2009-08-04 18:28:58
我在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)
发布于 2014-08-14 13:49:01
$str = json_encode($arr, JSON_UNESCAPED_UNICODE);这个解决方案适用于我的拉丁语和西里尔字母表,以及PHP5.5
https://stackoverflow.com/questions/410704
复制相似问题