PHP json_encode utf-8在数据库上的问题

时间:2014-10-22 14:28:10

标签: php json utf-8

我遇到了问题。我在数据库上传后使用json_encode。我的文件也在utf8和我的数据库中。但是在我的数据库中有一些\u00e9,我不知道为什么......

编辑:

有一个简单的代码:

$toast = array();
    for($i=0;$i<11;$i++)
        $toast[]='é';

    $toast = json_encode($toast);
    print utf8_decode($toast);

这不起作用如何打印一个充满'é'字符的简单数组...

编辑2:

此代码:

$toast = array();
    for($i=0;$i<11;$i++)
        $toast[]='é';

    $toast = json_encode($toast);
    print $toast;

输出:

["\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9","\u00e9"]

我想要:

["é","é","é","é","é","é","é","é","é","é","é"]

1 个答案:

答案 0 :(得分:7)

您可以使用JSON_UNESCAPED_UNICODE json_encode 标记(自PHP 5.4起可用):

$toast = json_encode($toast, JSON_UNESCAPED_UNICODE);

在PHP 5.4之前,您可以使用此代码段:

$toast = json_encode($toast);
$toast = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', function($matches) {return mb_convert_encoding(pack('H*', $matches[1]), 'UTF-8', 'UTF-16');}, $toast);

由于mb_convert_encoding()并非在所有安装中都可用,您还可以使用这种肮脏的解决方法:

$toast = array_map('htmlentities', $toast);
$toast = json_encode($toast);
$toast = html_entity_decode($toast);

但是\uXXXX值存在没有问题 - 它看起来更加丑陋。