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

Kommentare (0)

Von neu nach alt