【问题标题】:Php, how to "safe" JSON encode an array?PHP,如何“安全” JSON 编码一个数组?
【发布时间】:2012-12-25 11:52:08
【问题描述】:

我以前认为这是100%:

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

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

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

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

【问题讨论】:

  • 你确定你首先需要json_encode()吗?
  • 佩卡怎么说;也许serialize/unserialize 可能是这里的替代品。这处理了大量的 PHP 怪癖。

标签: php json utf-8


【解决方案1】:

一般的解决方案是让您的数据采用 UTF-8 格式。如果utf8_encode 对您有用,那么您的数据实际上是用 ISO-8859-1 编码的。

如果数据来自数据库并且您使用的是 MySQL,您可以这样做以使数据库结果以 UTF-8 而不是 ISO-8859-1 格式提供给您:

$mysqli->set_charset('utf8');

在进行任何查询之前。

这只是一个示例,它实际上取决于您从哪里获取数据。见UTF-8 all the way through

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • +1 是一个很酷的想法,但我更倾向于返回 $a 而不是通过引用传递的东西。
    • 那么解码呢? :)
    • @user1929946 忘记解码和编码,看看我的答案
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多