如何在没有UTF8的情况下使用PHP json_encode?

时间:2016-02-20 15:54:02

标签: php json unicode utf-8

我正在使用现有的旧网站。所有页面都是用ISO-European编码的,包括MySQL数据库。

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

是否有使用没有UTF8的json_encode的解决方案?

2 个答案:

答案 0 :(得分:1)

您可以使用var_exportutf8_encodeeval递归地将数组转换为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"}

答案 1 :(得分:1)

您唯一需要做的就是在将数据传递给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));

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