Zur Ermittlung der Zeichenlänge eines Strings kann strlen($string) verwendet werden.
Die Funktion gibt einen Integer-Wert zurück, welcher der Anzahl der Zeichen im String entspricht.
Bei Strings, die in UTF-8 kodiert sind, kann strlen() falsche Werte ergeben, da die Funktion davon ausgeht, dass jedes Zeichen durch ein Byte abgebildet wird, UTF-8-Zeichen aber auch aus mehreren Bytes bestehen können.
Es muss dann mb_strlen($string, $encoding) verwendet werden.
Die Anwendung von mb_strlen() auf Strings, die zum Beispiel in ISO-8859-1 oder in ASCII kodiert sind, erzeugt die selben Werte wie strlen().
Der Nachteil der Anwendung von mb_strlen() ist, dass die Funktion eine schlechtere Performance hat als strlen().
Daher sollte strlen() verwendet werden, wenn dies möglich ist, zum Beispiel wenn ein String ohnehin nur ASCII-Zeichen enthalten soll.
Die Funktion gibt einen Integer-Wert zurück, welcher der Anzahl der Zeichen im String entspricht.
PHP-Code
<?php var_dump(strlen("abc")); // erzeugt: 3 var_dump(strlen("")); // erzeugt: 0 // Das Zeichen fuer den Zeilenumbruch wird als ein Zeichen intepretiert var_dump(strlen("\n")); // erzeugt: 1 ?>
Ausgabe
int(3) int(0) int(1)
Bei Strings, die in UTF-8 kodiert sind, kann strlen() falsche Werte ergeben, da die Funktion davon ausgeht, dass jedes Zeichen durch ein Byte abgebildet wird, UTF-8-Zeichen aber auch aus mehreren Bytes bestehen können.
Es muss dann mb_strlen($string, $encoding) verwendet werden.
PHP-Code
<?php $mbStr = "ᴟ"; var_dump(strlen($mbStr)); // erzeugt: 4 var_dump(mb_strlen($mbStr, 'UTF-8')); // erzeugt: 1 ?>
Ausgabe
int(3) int(1)
Die Anwendung von mb_strlen() auf Strings, die zum Beispiel in ISO-8859-1 oder in ASCII kodiert sind, erzeugt die selben Werte wie strlen().
PHP-Code
<?php $str = "test"; var_dump(strlen($str)); // erzeugt 4 var_dump(mb_strlen($str, 'UTF-8')); // erzeugt 4 ?>
Ausgabe
int(4) int(4)
Der Nachteil der Anwendung von mb_strlen() ist, dass die Funktion eine schlechtere Performance hat als strlen().
Daher sollte strlen() verwendet werden, wenn dies möglich ist, zum Beispiel wenn ein String ohnehin nur ASCII-Zeichen enthalten soll.
PHP-Code: Performance von strlen() und mb_strlen() im Vergleich
<?php // Der Zeichensatz aller mb_* Funktionen wird auf UTF-8 festgelegt // das ist deutlich performanter als ihn jedes Mal neu an die jeweilige mb-Funktion zu übergeben mb_internal_encoding('UTF-8'); $str = 'abcdefghijklmnopqrstuvwxyz0123456789'; $start = microtime(true); for ($x=0; $x<1000000; $x++) { strlen($str); } $end = microtime(true); $startMb = microtime(true); for ($x=0; $x<1000000; $x++) { mb_strlen($str); } $endMb = microtime(true); $time = number_format(($end - $start), 4); $timeMb = number_format(($endMb - $startMb), 4); echo('strlen(): ' . $time . 's'."\n"); echo('mb_strlen(): ' . $timeMb . 's'); ?>
Ausgabe
strlen(): 0.2482s mb_strlen(): 0.3939s