如何在没有UTF8的情况下使用PHP json_编码?

如何在没有UTF8的情况下使用PHP json_编码?,php,json,unicode,utf-8,Php,Json,Unicode,Utf 8,我在一个旧的网站上工作。所有页面都使用ISO European编码,包括MySQL数据库 我想使用PHP的json_编码添加一些AJAX,它只支持UTF8 有没有一种不使用UTF8而使用json_编码的解决方案?您可以使用和eval递归地将数组转换为UTF-8。这有点像黑客,但有点像下面的作品: $obj = array("key" => "\xC4rger"); // "Ärger" in Latin1 eval('$utf8_obj = ' . utf8_encode(var_expo

我在一个旧的网站上工作。所有页面都使用ISO European编码,包括MySQL数据库

我想使用PHP的json_编码添加一些AJAX,它只支持UTF8

有没有一种不使用UTF8而使用json_编码的解决方案?

您可以使用和
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"}

您只需要将数据转换为UTF-8,然后再将其传递给
json\u encode
。该函数需要UTF-8数据,除非您想自己重新实现
json\u 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));

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

,这有帮助吗?只需要澄清一点:JSON要求/仅针对unicode标准指定(其中utf-8是适合的特定编码)。因此,不使用UTF8的语句
使用json\u encode没有真正的意义。除了
eval
之外,还有一种更明智的方法可以做到这一点。。。!