Start · Sprachen · PHP · Referenz · mb_str_split

mb_str_split

Funktion

Zerlegt einen Multibyte-String in ein Array seiner Zeichen oder Teilstrings einer bestimmten Länge.

seit PHP 7.4.0 Kategorie: string

Signatur

mb_str_split(string $string, int $length = 1, string|null $encoding = null): array

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

Typ
array
Beschreibung
Ein indiziertes Array mit den Teilstrings des zerlegten Strings. Bei einem leeren String wird ab PHP 8.0 ein leeres Array zurückgegeben. Bei ungültiger Kodierung wird 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);
Array ( [0] => H [1] => é [2] => l [3] => l [4] => o )

Zerlegung eines japanischen Strings in Chunks

<?php
$japanisch = 'こんにちは';
// Chunks à 2 Zeichen
$chunks = mb_str_split($japanisch, 2, 'UTF-8');
print_r($chunks);
Array ( [0] => こん [1] => にち [2] => は )

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;
}
8 Teile (str_split) 2 Zeichen (mb_str_split) 😀 🎉

// 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.