Start · Sprachen · PHP · Referenz · mb_split

mb_split

Funktion

Zerlegt einen Multibyte-String anhand eines regulären Ausdrucks in ein Array von Teilstrings.

seit PHP 4.2.0 Kategorie: string

Signatur

mb_split(string $pattern, string $string, int $limit = -1): array|false

Beschreibung

mb_split() funktioniert ähnlich wie preg_split(), ist jedoch auf Multibyte-Zeichenkodierungen (z. B. UTF-8, EUC-JP) ausgelegt. Der reguläre Ausdruck wird als Trennmuster verwendet, und der Eingabe-String wird an jeder Fundstelle dieses Musters aufgespalten.

Die Funktion berücksichtigt die aktuell aktive interne Kodierung, die mit mb_internal_encoding() gesetzt wurde. Dadurch werden Multibyte-Zeichen korrekt als einzelne Zeichen behandelt, was bei der Verwendung von split() oder preg_split() ohne entsprechende Unicode-Flags nicht garantiert ist.

Mit dem optionalen Parameter $limit lässt sich die maximale Anzahl der zurückgegebenen Teilstrings steuern. Wenn $limit positiv ist, wird der String in höchstens $limit Teile aufgespalten, wobei der letzte Teil den Rest des Strings enthält. Der Wert -1 bedeutet keine Begrenzung.

Typische Einsatzgebiete sind das Aufteilen japanischer, chinesischer oder anderer CJK-Texte sowie UTF-8-kodierter Strings anhand von Whitespace, Satzzeichen oder anderen Multibyte-Trennzeichen.

Parameter

Name Typ Default Beschreibung
$pattern Pflicht string Regulärer Ausdruck als Trennmuster. Verwendet die POSIX-Syntax erweitert durch Multibyte-Unterstützung. Es wird kein Trennzeichen (Delimiter) wie bei PCRE-Funktionen verwendet.
$string Pflicht string Der zu zerlegende Multibyte-String. Die Kodierung wird über mb_internal_encoding() bestimmt.
$limit int -1 Maximale Anzahl der zurückgegebenen Teilstrings. Bei -1 gibt es keine Begrenzung. Bei einem positiven Wert n werden höchstens n Elemente zurückgegeben, wobei das letzte Element den verbleibenden Rest des Strings enthält.

Rückgabewert

Typ
array|false
Beschreibung
Gibt ein Array mit den Teilstrings zurück, in die $string aufgespalten wurde. Im Fehlerfall (z. B. ungültiger regulärer Ausdruck) wird false zurückgegeben.

Beispiele

UTF-8-String anhand von Leerzeichen aufteilen

<?php
mb_internal_encoding('UTF-8');

$text = 'Héllo wörld föö';
$parts = mb_split('\s+', $text);

print_r($parts);
Array ( [0] => Héllo [1] => wörld [2] => föö )

Japanischen Text an Satzzeichen aufteilen

<?php
mb_internal_encoding('UTF-8');

$text = '日本語。テスト。文字列';
$parts = mb_split('。', $text);

print_r($parts);
Array ( [0] => 日本語 [1] => テスト [2] => 文字列 )

Limit der zurückgegebenen Teile begrenzen

<?php
mb_internal_encoding('UTF-8');

$text = 'eins,zwei,drei,vier,fünf';
$parts = mb_split(',', $text, 3);

print_r($parts);
Array ( [0] => eins [1] => zwei [2] => drei,vier,fünf )

// Wichtig · Fallstricke

Wichtig: Im Gegensatz zu PCRE-Funktionen wie preg_split() verwendet mb_split() keinen Delimiter um den regulären Ausdruck. Der Ausdruck wird direkt als String übergeben, also z. B. '\s+' statt '/\s+/'.

Die Funktion ist abhängig von der aktuellen internen Kodierung. Wird mb_internal_encoding() nicht explizit gesetzt, sollte man sicherstellen, dass die Standard-Kodierung korrekt konfiguriert ist (z. B. in der php.ini über mbstring.internal_encoding).

Für komplexere Muster mit Unicode-Properties (z. B. \p{L}) sollte stattdessen preg_split() mit dem u-Modifier (/muster/u) verwendet werden, da mb_split() keine PCRE-Unicode-Properties unterstützt.