Funktion strlen() - Länge einer Zeichenkette ermitteln

Bei der Verarbeitung von Zeichenketten wird manchmal die Länge benötigt. Die Ermittlung der Länge einer Zeichenkette benötigt man z.B. wenn man herausfinden möchte, ob die angegebene Postleitzahl in einem Formularfeld 5 Zeichen lang ist. Eine Möglichkeit hierfür bietet die Funktion strlen(). Innerhalb der runden Klammern gibt man die Zeichenkette bzw. eine Variable als Parameter an. Der Rückgabewert ist eine Ganzzahl (Typ int) die angibt, wieviele Bytes eine Zeichenkette als Speicherplatz belegt.

Aus technischer Sicht wird mit der Funktion strlen() somit nicht wirklich die Anzahl der Zeichen gezählt, sondern die Anzahl der Bytes, die eine Zeichenkette belegt. Wie viel Speicher ein Zeichen benötigt, hängt von der verwendeten Zeichenkodierung ab. Bei den meisten PHP-Anwendungen verwendet man mittlerweile UTF-8 und hierbei ist es bei den meisten verwendeten Zeichen der Fall, dass für jedes Zeichen ein Byte belegt wird, sodass man über den Rückgabewert der Funktion strlen() auch Rückschlüsse auf die Anzahl der Zeichen einer Zeichenkette ziehen kann.

Beim folgenden Beispiel enthält die Variable $str eine Zeichenkette mit 6 Zeichen. Die Ausgabe der Funktion strlen($str) ist ebenfalls 6. Als Zeichenkodierung wurde UTF-8 gewählt, die auch für die übrigen Beispiele gilt.

<?php

$str = 'ABC123';

// Ausgabe 6
echo strlen($str);

?>

Sogenannte whitespaces wie Leerzeichen, Tabulatoren, Zeilenumbrüche etc. belegen ebenfalls ein Byte, auch wenn diese mit \ maskiert und mit zwei oder mehr Zeichen geschrieben werden. Beim folgenden Beispiel ist die Ausgabe 9, auch wenn die Anzahl der geschriebenen Zeichen in der Variable $str tatsächlich höher ist. Die Zeichenkette wurde in normalen Anführungszeichen gesetzt, da \t\n\r\0\x0B ansonsten von PHP nicht als whitespaces betrachtet werden. Innerhalb von einfachen Hochkommas behandelt PHP ein Backslash \ als ein eigenständiges Zeichen und nicht als Teil eines whitespace.

<?php

$str = "ABC \t\n\r\0\x0B";

// Ausgabe 9
echo strlen($str);

?>

Setzt man eine Zeichenkette innerhalb von einfachen Hochkommas, so muss man bei der Verwendung eines Hochkommas in der Zeichenkette dies mit \' maskieren. Dasselbe betrifft Zeichenketten in normalen Anführungszeichen, die eine Maskierung von " mit \" erfordern. In beiden Fällen gibt strlen() eine 1 zurück, auch wenn \" oder \' eigentlich aus zwei Zeichen bestehen.

<?php

$str = '\'';

// Ausgabe 1
echo strlen($str);


$str = "\"";

// Ausgabe 1
echo strlen($str);

?>

Sonderzeichen wie <, > oder & haben in PHP oder HTML eine spezielle Bedeutung. Damit sie trotzdem als normale Zeichen behandelt werden, können sie als Entitäten geschrieben werden, z.B. &lt; für <. Auch für andere Sonderzeichen wie ", ', ©, etc. gibt es Entitäten. Enthält eine Zeichenkette eine Entität, wird sie nicht als ein Zeichen gezählt.

<?php
$str = '&lt;';

// Ausgabe 4
echo strlen($str);


$str = '&gt;';

// Ausgabe 4
echo strlen($str);


$str = '&#039;';

// Ausgabe 6
echo strlen($str);


$str = '&quot;';

// Ausgabe 6
echo strlen($str);

?>

Da Zeichen mit der Zeichenkodierung UTF-8 auch mehrere Bytes belegen können, kann es passieren, dass der Rückgabewert von strlen() nicht der tatsächlichen Anzahl der Zeichen entspricht. Das kann insbesondere bei Sonderzeichen der Fall sein. Beim folgenden Beispiel ist der Rückgabewert jeweils eine 2, obwohl in der Zeichenkette nur 1 Zeichen vorhanden ist.

<?php

$str = '¡';

// Ausgabe 2
echo strlen($str);


$str = '£';

// Ausgabe 2
echo strlen($str);


$str = '¶';

// Ausgabe 2
echo strlen($str);


$str = 'Æ';

// Ausgabe 2
echo strlen($str);

?>

Die Umlaute Ä, Ö, Ü oder das ß belegen die Bytes abhängig von der Zeichenkodierung. Mit UTF-8 belegen sie 2 Bytes, mit ISO-8859-1 oder ANSI nur 1 Byte. Der Unterschied ist beim folgenden Code sichtbar. Speichert man die Datei einmal mit der Zeichenkodierung ANSI und einmal mit UTF-8, erhält man unterschiedliche Werte.

<?php

$str = 'Ä';

// Ausgabe bei UTF-8 = 2, ANSI = 1
echo strlen($str);


$str = 'Ö';

// Ausgabe bei UTF-8 = 2, ANSI = 1
echo strlen($str);


$str = 'Ü';

// Ausgabe bei UTF-8 = 2, ANSI = 1
echo strlen($str);


$str = 'ß';

// Ausgabe bei UTF-8 = 2, ANSI = 1
echo strlen($str);

?>

Wenn man die genaue Anzahl der Zeichen zurückgeben lassen möchte, kann man die Funktion mb_strlen() verwenden. Hierbei wird neben der Zeichenkette auch die Zeichenkodierung als Parameter angegeben, sodass der Rückgabewert genauer ist. Ein Nachteil hierbei ist die Geschwindigkeit. Wenn man sicher ist, dass keine exotischen Zeichen verwendet werden, die 2 oder mehr Bytes belegen, kann man aufgrund der Geschwindigkeitsvorteile strlen() verwenden.