Php,如何“安全”JSON编码一个数组?

时间:2013-01-10 23:13:49

标签: php json utf-8

我曾经认为这是100%:

file_put_contents ('cacheHere', json_encode($array));

但这只是99%。它只能编码utf8编码数据,所以:

file_put_contents ('cacheHere', json_encode(utf8_encode($array)));

它仍然不行,因为$ array是数组,而不是字符串。我知道我可以逐个编码一个字段,但我需要一个通用的解决方案。

2 个答案:

答案 0 :(得分:4)

使用array_walk_recursive,并在回调检查中检查当前条目是否为is_string的字符串。如果是,则utf8_encode,否则保持原样。

json_encode (array_walk_recursive ($array, function (&$a) {
    if (is_string ($a)) {
        $a = utf8_encode ($a);
    }
}));

答案 1 :(得分:3)

一般解决方案是将您的数据保存为UTF-8。如果utf8_encode适合您,那么您的数据实际上是用ISO-8859-1编码的。

如果数据来自数据库并且您使用的是MySQL,那么您可以使用UTF-8而不是ISO-8859-1来获取数据库结果:

$mysqli->set_charset('utf8');

在进行任何查询之前。

这只是一个例子,它实际上取决于您从何处获取数据。请参阅UTF-8 all the way through