Signatur
Beschreibung
mb_str_split() zerlegt einen Multibyte-String in ein Array von Teilstrings. Standardmäßig wird jedes einzelne Zeichen als eigenes Element zurückgegeben, aber über den Parameter $length kann auch eine feste Chunk-Größe in Zeichen angegeben werden. Die Funktion ist das Multibyte-Pendant zu str_split() und arbeitet korrekt mit Mehrbytezeichen (z. B. UTF-8, Chinesisch, Arabisch, Emoji).
Ein typischer Anwendungsfall ist die zeichenweise Verarbeitung von Texten in Sprachen, die mehr als ein Byte pro Zeichen benötigen – also praktisch alle nicht-ASCII-Sprachen. Wo str_split() Multibyte-Zeichen zerstückeln und unlesbaren Datenmüll produzieren würde, liefert mb_str_split() sauber getrennte, korrekte Zeichen.
Der optionale Parameter $encoding erlaubt die explizite Angabe der Zeichenkodierung (z. B. 'UTF-8'). Wird er weggelassen oder ist null, verwendet die Funktion die intern konfigurierte Standard-Kodierung, die über mb_internal_encoding() gesetzt werden kann.
Der Rückgabewert ist immer ein indiziertes Array. Bei einem leeren String wird ein leeres Array zurückgegeben (ab PHP 8.0), in PHP 7.4 wird bei leerem String ein Array mit einem leeren String-Element zurückgegeben – ein bekannter Fallstrick.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der zu zerlegende Multibyte-String. | |
| $length | int | 1 | Die Länge jedes Teilstrings in Zeichen (nicht Bytes). Muss größer als 0 sein, sonst wird ein ValueError ausgelöst. |
| $encoding | string|null | null | Die Zeichenkodierung, z. B. 'UTF-8'. Bei null oder Weglassen wird die interne Standard-Kodierung genutzt (siehe mb_internal_encoding()). |
Rückgabewert
false zurückgegeben.Beispiele
Zeichenweise Zerlegung eines UTF-8-Strings
<?php
$text = 'Héllo';
$zeichen = mb_str_split($text, 1, 'UTF-8');
print_r($zeichen);
Zerlegung eines japanischen Strings in Chunks
<?php
$japanisch = 'こんにちは';
// Chunks à 2 Zeichen
$chunks = mb_str_split($japanisch, 2, 'UTF-8');
print_r($chunks);
Emoji-Verarbeitung: Vergleich mit str_split
<?php
$emoji = '😀🎉';
// str_split zerstört die Multibyte-Zeichen:
$kaputt = str_split($emoji);
echo count($kaputt) . ' Teile (str_split)' . PHP_EOL;
// mb_str_split liefert korrekte Zeichen:
$korrekt = mb_str_split($emoji, 1, 'UTF-8');
echo count($korrekt) . ' Zeichen (mb_str_split)' . PHP_EOL;
foreach ($korrekt as $z) {
echo $z . PHP_EOL;
}
// Wichtig · Fallstricke
PHP 7.4 vs. PHP 8.0: In PHP 7.4 gibt mb_str_split('') das Array [''] zurück (ein Element: ein leerer String), während PHP 8.0 und höher korrekt ein leeres Array [] liefern. Bei versionskritischem Code sollte dies berücksichtigt werden.
ValueError: Wird für $length ein Wert kleiner als 1 übergeben, wirft PHP 8.0+ einen ValueError. In PHP 7.x führt dies zu einem E_WARNING und false als Rückgabewert.
Für rein ASCII-Strings ohne Multibyte-Bedarf kann die einfachere Funktion str_split() verwendet werden, da sie performanter ist.