Start · Sprachen · PHP · Referenz · mb_detect_order

mb_detect_order

Funktion

Setzt oder liefert die Reihenfolge, in der <code>mb_detect_encoding()</code> Zeichenkodierungen erkennt.

seit PHP 4.0.6 Kategorie: string

Signatur

mb_detect_order(array|string|null $encoding = null): array|bool

Beschreibung

mb_detect_order() steuert die interne Reihenfolge der Kodierungserkennung für Multibyte-String-Funktionen wie mb_detect_encoding() und mb_convert_encoding(). Die Funktion wird ohne Argument aufgerufen, um die aktuelle Erkennungsreihenfolge als Array abzufragen, oder mit einem Argument, um eine neue Reihenfolge zu setzen.

Die Erkennungsreihenfolge beeinflusst maßgeblich, welche Kodierung erkannt wird, wenn eine Zeichenkette mehrere mögliche Kodierungen zulässt. Da viele Kodierungen (z. B. ISO-8859-1 und UTF-8) sich überlappen, sollten spezifischere Kodierungen wie UTF-8 möglichst früh in der Liste stehen, um Fehlerkennungen zu vermeiden.

Als Argument akzeptiert die Funktion entweder ein Array von Kodierungsnamen oder eine kommaseparierte Zeichenkette. Gültige Kodierungsnamen sind z. B. UTF-8, ISO-8859-1, EUC-JP, SJIS oder das spezielle Alias auto, das für eine vordefinierte Liste gängiger Kodierungen steht.

Die gesetzte Reihenfolge gilt global für den laufenden PHP-Prozess. Alternativ kann sie in der php.ini über die Direktive mbstring.detect_order konfiguriert werden.

Parameter

Name Typ Default Beschreibung
$encoding array|string|null null Eine kommaseparierte Liste von Kodierungsnamen als string, ein array von Kodierungsnamen oder null. Wird null übergeben oder kein Argument angegeben, gibt die Funktion die aktuell eingestellte Erkennungsreihenfolge zurück. Das Alias "auto" expandiert zu einer vordefinierten Liste gängiger Kodierungen.

Rückgabewert

Typ
array|bool
Beschreibung
Wird kein Argument oder null übergeben, gibt die Funktion ein array mit den aktuell eingestellten Kodierungsnamen zurück. Wird eine neue Reihenfolge gesetzt, gibt die Funktion true bei Erfolg oder false zurück, wenn eine ungültige Kodierung angegeben wurde.

Beispiele

Aktuelle Erkennungsreihenfolge abfragen

<?php
// Aktuelle Erkennungsreihenfolge ausgeben
$order = mb_detect_order();
print_r($order);
Array ( [0] => ASCII [1] => UTF-8 )

Erkennungsreihenfolge mit Array setzen

<?php
// UTF-8 priorisieren, dann Latin-1, dann Windows-1252
mb_detect_order(['UTF-8', 'ISO-8859-1', 'Windows-1252']);

$strings = [
    "Hello World",          // ASCII-kompatibel
    "Héllo",                // könnte ISO-8859-1 oder UTF-8 sein
    mb_convert_encoding("Grüße", 'UTF-8', 'UTF-8'), // gültiges UTF-8
];

foreach ($strings as $str) {
    echo mb_detect_encoding($str) . "\n";
}
UTF-8 UTF-8 UTF-8

Erkennungsreihenfolge mit kommasepariertem String setzen

<?php
// Reihenfolge als kommaseparierten String setzen
$result = mb_detect_order('UTF-8, EUC-JP, SJIS, ISO-8859-1');
var_dump($result);

// Neue Reihenfolge anzeigen
print_r(mb_detect_order());
bool(true) Array ( [0] => UTF-8 [1] => EUC-JP [2] => SJIS [3] => ISO-8859-1 )

Ungültige Kodierung abfangen

<?php
// Ungültige Kodierung übergeben
$result = mb_detect_order(['UTF-8', 'UNBEKANNTE-KODIERUNG']);
if ($result === false) {
    echo "Fehler: Ungültige Kodierung angegeben.\n";
} else {
    echo "Reihenfolge erfolgreich gesetzt.\n";
}
Fehler: Ungültige Kodierung angegeben.

// Wichtig · Fallstricke

Reihenfolge ist entscheidend: Da viele Kodierungen Überschneidungen haben, kann eine falsch gewählte Reihenfolge dazu führen, dass Zeichenketten fälschlicherweise als eine andere Kodierung erkannt werden. UTF-8 sollte in der Regel an erster Stelle stehen, da es strenge Gültigkeitsprüfungen hat.

Globale Wirkung: Die gesetzte Reihenfolge gilt für den gesamten PHP-Prozess. Bei Verwendung in Bibliotheken oder Frameworks empfiehlt es sich, die ursprüngliche Reihenfolge zwischenzuspeichern und nach der Verwendung wiederherzustellen.

Das Alias auto: Dieses Alias expandiert zu einer vordefinierten Liste, die von der mbstring-Konfiguration abhängt. Der genaue Inhalt kann sich zwischen PHP-Versionen und Konfigurationen unterscheiden — für produktive Anwendungen sollte man die Kodierungen explizit auflisten.

Konfigurationsalternative: Die Standard-Erkennungsreihenfolge kann in der php.ini mit mbstring.detect_order = UTF-8,ISO-8859-1 dauerhaft festgelegt werden, was für globale Einstellungen empfohlen wird.