我有一个多维数组,看起来像这样:
ourThing = array(
'id' => 1,
'title' => 'foo',
'data' => array(
'name' => 'bar',
'metadata' => array(
'time' => '2011-02-01 12:00:00'
)
)
);
Run Code Online (Sandbox Code Playgroud)
现在,因为我不得不使用json_encode和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');
}
}
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用.如果我在编码后立即打印$ 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);
Run Code Online (Sandbox Code Playgroud)
Tra*_*ty3 15
这个怎么样:
function myEncodeFunction(&$item)
{
$item = mb_convert_encoding($item, 'Windows-1252', 'UTF-8');
}
array_walk_recursive($ourThing, 'myEncodeFunction');
Run Code Online (Sandbox Code Playgroud)
甚至把它变成一个单行:
array_walk_recursive($ourThing, function(&$item) { $item = mb_convert_encoding($item, 'Windows-1252', 'UTF-8'); });
Run Code Online (Sandbox Code Playgroud)
Pau*_*man 10
:-)
function encode_items($array)
{
foreach($array as $key => $value)
{
if(is_array($value))
{
$array[$key] = encode_items($value);
}
else
{
$array[$key] = mb_convert_encoding($value, 'Windows-1252', 'UTF-8');
}
}
return $array;
}
Run Code Online (Sandbox Code Playgroud)
或者您可以通过引用传入数组,但我更喜欢这个.
| 归档时间: |
|
| 查看次数: |
11834 次 |
| 最近记录: |