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

标签 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"]

我想要:

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

最佳答案

您可以使用 json_encodeJSON_UNESCAPED_UNICODE 标志(自 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没有问题 - 它只是看起来更丑。

关于数据库上的 PHP json_encode utf-8 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26509896/

相关文章:

php - 如何使用php中的代码在数据库中插入动态表单字段的值

php - array_column 在 PHP 5.6 中返回空数组

java - Jackson - 将属性序列化/反序列化为 JSON 值

javascript - 下载文件时在文件内容中获取类型 [object object],而不是使用 angular 7 的 blob

xml - 无法支持 ColdFusion 生成的 XML 文件中的非 UTF-8 字符

mysql - 如何导出具有latin1字符集的数据并维护该字符集

python - 将数字 utf-8 序列转换为字符串

php - mysql 查询从 10,000 条数据中检索太慢(查询优化)

php - 发帖请求的大小限制是多少?

java - 无法使用自定义反序列化器反序列化 JSON 对象