Die Länge eines Strings ermitteln (Thema: PHP Beispiele)

Wie man in PHP von einem String die Länge auslesen und anzeigen kann

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.
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
Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK