I have a multidimensional array that looks something like this:
ourThing = array(
'id' => 1,
'title' => 'foo',
'data' => array(
'name' => 'bar',
'metadata' => array(
'time' => '2011-02-01 12:00:00'
)
)
);
Now, because I have to use json_encode
and json_decode
on them, I need to store at least the stuff in data
as UTF-8. Unfortunately, the website uses windows-1252, and that's something I can't change. Because I might want to add even more levels to the array (within data) in the future, I figured I'd change the encoding recursively, like so:
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');
}
}
However, this is not working. If I print $arr[$n] right after encoding it, it comes out right, but the original array doesn't seem to change, because when I later try to print out the values from the array, I get character encoding issues.
tl;dr: I need to change the encoding of the information in ourThing['data']
from utf-8 to windows-1252.
How can I make it so that the original array is changed?
EDIT: Thanks to a helpful commenter, I now know what I was doing wrong. I forgot to actually return the array after doing the encoding. Here's a working example:
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);
How about this:
function myEncodeFunction(&$item)
{
$item = mb_convert_encoding($item, 'Windows-1252', 'UTF-8');
}
array_walk_recursive($ourThing, 'myEncodeFunction');
Or even turn it into a one-liner:
array_walk_recursive($ourThing, function(&$item) { $item = mb_convert_encoding($item, 'Windows-1252', 'UTF-8'); });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With