我有一个多维数组,看起来像这样:
ourThing = array(
'id' => 1,
'title' => 'foo',
'data' => array(
'name' => 'bar',
'metadata' => array(
'time' => '2011-02-01 12:00:00'
)
)
);
现在,因为我必须使用json_encode
and json_decode
在他们身上,我至少需要将这些东西存储在data
作为 UTF-8。不幸的是,该网站使用 windows-1252,这是我无法更改的。因为我将来可能想向数组(在数据内)添加更多级别,所以我想我会递归地更改编码,如下所示:
function encode_items($arr) {
foreach ($arr as $n => $v) {
if (is_array($v))
encode_items($arr[$n]);
else
$arr[$n] = mb_convert_encoding($v, 'Windows-1252', 'UTF-8');
}
}
然而,这是行不通的。如果我在编码后立即打印 $arr[$n] ,结果是正确的,但原始数组似乎没有改变,因为当我稍后尝试打印数组中的值时,我遇到了字符编码问题。
tl;dr:我需要更改信息的编码ourThing['data']
从 utf-8 到 windows-1252。
我怎样才能改变原来的数组呢?
编辑:感谢一位有用的评论者,我现在知道我做错了什么。我忘记在编码后实际返回数组。这是一个工作示例:
ourArray = array(
'id' => 1,
'title' => 'foo',
'data' => array(
'name' => 'bar',
'metadata' => array(
'time' => '2011-02-01 12:00:00'
)
)
);
function encode_items($arr) {
foreach ($arr as $n => $v) {
if (is_array($v)) {
$arr[$n] = encode_items($v);
} else {
$arr[$n] = mb_convert_encoding($v, 'Windows-1252', 'UTF-8');
}
}
return $arr;
}
$ourArray = encode_items($ourArray);