Signatur
Beschreibung
mb_convert_variables() wandelt die Zeichenkodierung aller übergebenen Variablen von der Quell- in die Zielkodierung um. Die Funktion arbeitet in-place: Die übergebenen Variablen werden direkt verändert (Call by Reference). Das macht sie besonders praktisch, wenn mehrere Variablen auf einmal konvertiert werden sollen, ohne für jede einzeln mb_convert_encoding() aufrufen zu müssen.
Die Funktion unterstützt Strings, Arrays und Objekte. Bei Arrays und Objekten werden alle enthaltenen String-Werte rekursiv konvertiert. Array-Schlüssel werden dabei nicht konvertiert.
Der Parameter from_encoding kann entweder ein einzelner Kodierungsname oder ein Array von Kodierungsnamen sein. Im letzteren Fall erkennt die Funktion die tatsächliche Quellkodierung automatisch anhand der übergebenen Daten (ähnlich wie mb_detect_encoding()). Dies ist nützlich, wenn die Eingabekodierung nicht eindeutig bekannt ist.
Typische Anwendungsfälle sind die Verarbeitung von Formulardaten oder externen Datenquellen, die in einer anderen Kodierung als der eigenen Anwendung vorliegen, beispielsweise Legacysysteme mit ISO-8859-1-Daten, die in UTF-8 verarbeitet werden sollen.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $to_encoding Pflicht | string | Die Zielkodierung, in die konvertiert werden soll, z. B. 'UTF-8' oder 'ISO-8859-1'. |
|
| $from_encoding Pflicht | array|string | Die Quellkodierung oder eine Liste von möglichen Quellkodierungen als Array (z. B. ['ISO-8859-1', 'UTF-8']). Bei einer Liste wird die Kodierung automatisch erkannt. |
|
| $vars Pflicht | mixed | Eine oder mehrere Variablen (per Referenz), deren Inhalt konvertiert werden soll. Strings, Arrays und Objekte sind erlaubt. Arrays und Objekte werden rekursiv verarbeitet. |
Rückgabewert
false zurückgegeben.Beispiele
Einfache Konvertierung eines Strings von ISO-8859-1 nach UTF-8
<?php
// String in ISO-8859-1-Kodierung simulieren
$text = iconv('UTF-8', 'ISO-8859-1', 'Über die Änderungen');
$detectedEncoding = mb_convert_variables('UTF-8', 'ISO-8859-1', $text);
echo 'Erkannte Quellkodierung: ' . $detectedEncoding . PHP_EOL;
echo 'Konvertierter Text: ' . $text . PHP_EOL;
Mehrere Variablen und Arrays gleichzeitig konvertieren
<?php
// Simuliere ISO-8859-1-kodierte Formulardaten
$name = iconv('UTF-8', 'ISO-8859-1', 'Müller');
$address = iconv('UTF-8', 'ISO-8859-1', 'Straße 12');
$tags = [
iconv('UTF-8', 'ISO-8859-1', 'Größe'),
iconv('UTF-8', 'ISO-8859-1', 'Gewicht'),
];
// Alle drei Variablen auf einmal konvertieren
$from = mb_convert_variables('UTF-8', ['ISO-8859-1', 'UTF-8'], $name, $address, $tags);
echo 'Erkannte Kodierung: ' . $from . PHP_EOL;
echo $name . PHP_EOL;
echo $address . PHP_EOL;
print_r($tags);
// Wichtig · Fallstricke
Achtung: Array-Schlüssel werden von mb_convert_variables() nicht konvertiert, nur die Werte. Falls Schlüssel ebenfalls Multibyte-Zeichen enthalten, müssen diese manuell behandelt werden.
Die automatische Erkennung der Quellkodierung anhand einer Liste kann bei kurzen oder ambivalenten Strings zu falschen Ergebnissen führen. Es empfiehlt sich, die Quellkodierung möglichst explizit anzugeben, wenn sie bekannt ist.
Die Funktion verändert die übergebenen Variablen direkt (per Referenz). Es gibt keine separate Kopie der Originaldaten, daher sollte man ggf. vorher eine Sicherungskopie anlegen.