当前位置:  开发笔记 > 编程语言 > 正文

PHP的json_encode中的西里尔字符

如何解决《PHP的json_encode中的西里尔字符》经验,为你挑选了3个好方法。

我正在尝试使用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个字符.有没有办法获取键/值对的原始字符而不是编码的?



1> Alexander Fa..:

你不能在这里使用JSON_UNESCAPED_UNICODE常量吗?



2> Boris Cherve..:

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



3> chanklor..:
$str = json_encode($arr, JSON_UNESCAPED_UNICODE);

使用此解决方案对PHP 5.5的拉丁字母和西里尔字母都有效

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有