Ändern der Zeichenverschlüsselung der mehrdimensionalen array
Ich habe ein mehrdimensionales array, dass wie folgt aussieht:
ourThing = array(
'id' => 1,
'title' => 'foo',
'data' => array(
'name' => 'bar',
'metadata' => array(
'time' => '2011-02-01 12:00:00'
)
)
);
Nun, da ich json_encode
und json_decode
auf, in dem ich Sie speichern müssen zumindest die Sachen, die in data
als UTF-8. Leider, die website verwendet, windows-1252, und das ist etwas, was ich nicht ändern kann. Da möchte ich vielleicht noch mehr-Ebenen, um das array (in-Daten) in die Zukunft, ich dachte, ich würde ändern Sie die Codierung an, die rekursiv, wie folgt:
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');
}
}
Dies ist jedoch nicht arbeiten. Wenn ich print $arr[$n] rechts, nach der Enkodierung, es geht, aber das original-array scheint nicht zu ändern, denn wenn ich später versuchen, drucken Sie die Werte aus dem array, bekomme ich die character-encoding-Probleme.
tl;dr: ich brauche eine änderung der Kodierung der Informationen in ourThing['data']
von utf-8 auf windows-1252.
Wie kann ich es so machen, dass das ursprüngliche array wird verändert?
EDIT: Dank an einen hilfreichen Kommentator, ich weiß jetzt, was ich falsch machte. Ich vergaß tatsächlich die Rückkehr das array nach der Codierung. Hier ist ein Beispiel:
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);
- Ihnen fehlt ein
$
imforeach ($arr as $n => ___v) {
- Oops. Typo. Ist jetzt behoben.
- Vielleicht Rückkehr das array wäre eine solide verschieben!
- Oh wow... ich habe schon viel zu lange. Ja. Ich höre tatsächlich wieder etwas von Ihr Funktionen hilft. Wenn Sie uns das als Antwort, ich werde schändlich akzeptieren.
- Können wir fassen das Problem als 'der oben genannten Funktion wirkt sich nicht auf das original-array'? Machen verwenden von array-Referenzen statt mit der et-Zeichen "anmelden", d.h.
&$arr
Du musst angemeldet sein, um einen Kommentar abzugeben.
🙂
Oder Sie können übergeben Sie das array als Referenz, aber ich bevorzuge diese.
Wie wäre es damit:
Oder sogar schalten Sie es in einen one-liner:
Windows-1252
undISO-8859-1
können, gleichwertig behandelt zu werden-Kodierungen.