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