【问题标题】:How to use PHP json_encode without UTF8?如何在没有 UTF8 的情况下使用 PHP json_encode?
【发布时间】:2016-06-02 05:14:28
【问题描述】:

我正在开发一个现有的旧网站。所有页面均采用 ISO-Europe 编码,包括 MySQL 数据库。

我想用 PHP 的 json_encode 添加一些 AJAX,它只支持 UTF8。

有没有办法使用不带UTF8的json_encode?​​p>

【问题讨论】:

  • 只是为了澄清一点:JSON 只需要/被指定用于 unicode 标准(其中 utf-8 是适合的特定编码)。所以声明use json_encode without UTF8 没有真正的意义。

标签: php json unicode utf-8


【解决方案1】:

您可以使用var_export、utf8_encode 和eval 递归地将数组转换为UTF-8。这有点像黑客,但类似以下的作品:

$obj = array("key" => "\xC4rger"); // "Ärger" in Latin1
eval('$utf8_obj = ' . utf8_encode(var_export($obj, TRUE)) . ';');
print json_encode($utf8_obj);

这将打印出来

{"key":"\u00c4rger"}

【讨论】:

  • 除了eval...之外,必须有更明智的方法来做到这一点!
【解决方案2】:

您唯一需要做的就是在将数据传递给json_encode 之前将其转换为UTF-8。该函数需要 UTF-8 数据,除非您想自己重新实现 json_encode,否则满足其要求要容易得多:

function recursivelyConvertToUTF8($data, $from = 'ISO-8859-1') {
    if (!is_array($data)) {
        return iconv($from, 'UTF-8', $data);
    }
    return array_map(function ($value) use ($from) {
        return recursivelyConvertToUTF8($value, $from);
    }, $data);
}

echo json_encode(recursivelyConvertToUTF8($myData));

这不一定是涵盖所有可能用例的完整解决方案,但它应该说明这个想法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-05-22
    • 2015-12-30
    • 2021-06-22
    • 2016-01-02
    • 2021-10-30
    • 2018-01-01
    • 2012-05-11
    • 1970-01-01
    相关资源
    最近更新 更多