Strings in PHP: Länge, Größe und Wortzahl ermitteln

    Logo der Programmiersprache PHP
    Avatarbild von Patrick
    Patrick

    veröffentlicht am: 08.05.2020
    zuletzt aktualisiert am: 07.02.2023

    So ermitteln wir die Länge unseres PHP Strings!

    Manchmal stellt sich bei der Ausführung eines Skriptes die Frage, wie lang ein String ist, welche Größe er im Speicher hat.
    In PHP stehen uns hier für die verschiedenen Anwendungsfälle einige Möglichkeiten zur Verfügung.
    Im Folgenden versuche ich die Wichtigsten davon in Beispielen möglichst ansprechend und beschreibend darzustellen.

    Länge eines Strings in Bytes mit strlen ermitteln

    Mit der Funktion strlen kannst du dir die Größe eines Strings in Bytes ausgeben lassen.

    strlen($string)
        $string
            Der string wird auf seine Länge hin untersucht

    Für viele Strings mag dieser Wert gleich der Zeichenlänge sein, allerdings ist dies bei manchen Sprachen nicht der Fall.

    $hello_world = 'Hello World';
    
    echo strlen($hello_world);
    // 11
    // Hello World auf Japanisch
    
    $utf8 = "こんにちは世界";
    echo strlen($utf8);
    // 21

    Im vorherigen Beispiel ist ein String auf Japanisch mit 7 Zeichen abgebildet.
    Das Ergebnis von strlen ergibt allerdings das dreifache.

    Mit utf8_decode kannst du einen String von UTF-8 nach ISO-8859-1 konvertieren.
    Dabei werden die nicht in ISO-8859-1 existieren oder nicht gültig in UTF-8 sind durch ‚?‘ ersetzt.
    Um die Anzahl an Zeichen in einem String zu zählen, ist diese Konvertierung meist ausreichend.

    $utf8 = "こんにちは世界";
    echo strlen(utf8_decode($utf8));
    // 7

    Multibyte Strings mit mb_strlen und iconv_strlen

    mb_strlen

    Da ein Byte nur aus 8 bits besteht, kann dieser maximal 256 (2^8) einzigartige Werte haben.
    Dies kommt uns in die Quere, wenn wir Strings in Sprachen überprüfen, deren Zeichen nicht mit einem Byte gespeichert repräsentiert werden können.
    Um diese Art String zu behandeln, stellt uns PHP die Funktion mb_strlen zur Verfügung.

    mb_strlen($string, $zeichenkodierung)
        $string (erforderlich)
            Der String, dessen Länge zurückgegeben wird
        $zeichenkodierung (optional)
            Angewendete Zeichenenkodierung
            Standardwert ist die interne Zeichenkodierung

    Diese Funktion gibt die Anzahl der Zeichen im String mit der angegebenen Zeichenkodierung zurück. Ein Multibyte Zeichen wird hierbei als 1 gezählt.

    echo mb_strlen("こんにちは世界");
    // 7

    Du kannst in der Funktion mb_strlen die Zeichenkodierung als zweiten Parameter übergeben.
    Wenn du hier eine gültige, für deinen String jedoch unpassende Zeichenkodierung angibst, können die Ergebnisse durchaus variieren.

    echo mb_strlen("こんにちは世界", 'utf-8');
    // 7
    echo mb_strlen("こんにちは世界", 'Big5');
    // 11
    echo mb_strlen("こんにちは世界", 'utf-32');
    // 5

    Wenn du als Zeichenkodierung einen ungültigen Wert übergibst, erhältst du eine Fehlermeldung und als Rückgabewert false.

    var_dump(mb_strlen("こんにちは世界", 'utf-4'));
    // Warning: mb_strlen(): Unknown encoding "utf-4" in C:\...\string_length.php on line 53
    // bool(false)

    Mit der Funktion mb_internal_encoding kannst du erfragen welche die interne Zeichenkodierung ist und diese ändern.

    echo mb_internal_encoding("UTF-8");
    // 1
    echo mb_internal_encoding();
    // UTF-8

    Auch hier erhältst du eine Fehlermeldung und false als Rückgabewert, wenn du diese mit einer ungültigen Kodierung aufrufst.

    var_dump(mb_internal_encoding('utf-4'));
    // Warning: mb_internal_encoding(): Unknown encoding "utf-4" in C:\...\string_length.php on line 59
    // bool(false)

    iconv_strlen

    Die Funktion iconv_strlen hat den gleichen Zweck wie mb_strlen: Du kannst mit ihr Multibyte Zeichen zählen.

    echo iconv_strlen("こんにちは世界");
    // 1
    echo iconv_strlen("こんにちは世界", "UTF-8");
    // 1

    Der wesentliche Unterschied zwischen mb_strlen und iconv_strlen ist der Umgang mit schlechten Zeichenfolgen.
    Während mb_strlen diese ignoriert, gibt iconv_strlen einen Fehler zurück.

    $string = "\xe9";
    echo mb_strlen($string,'utf-8');
    // 1
    
    echo iconv_strlen($string,'utf-8');
    // iconv_strlen(): Detected an incomplete multibyte character in input string in C:\...\string_length.php on line 74

    Vorkommen eines Teilstrings zählen mit substr_count

    Mit der Funktion substr_count kannst du in Erfahrung bringen, wie oft sich ein Teilstring in einem String befindet.

    substr_count($heuhaufen, $nadel, $versatz, $laenge)
        $heuhaufen (erforderlich)
            String, in dem gesucht wird
        $nadel (erforderlich)
            Der gesuchte Teilstring
        $versatz (optional)
            Der Punkt ab dem im String gesucht wird
            Bei negativem Wert wird vom Ende des Strings gezählt
        $laenge (optional)
            Maximale Länge nach $versatz
            Negative Länge zählt vom Ende des $heuhaufen

    Wenn $versatz und $laenge zusammen größer als die Stringlänge sind, wird eine Warnung ausgegeben.
    Wenn du substr_count mit zwei Parametern aufrufst, erhältst du als Rückgabewert die Anzahl der Vorkommen des Teilstrings $nadel.

    $string = 'Code Citrus Citrus Code Citrus';
    echo substr_count($string, 'Citrus');
    // 3

    Mit Angabe des Versatz kannst du bestimmen, von welcher Indexposition an der String nach dem Teilstring durchsucht werden soll.

    echo substr_count($string, 'Citrus', 11);
    // 2

    Im vorigen Beispiel wurde der hier dick unterlegte Teil des Strings untersucht:
    ‚Code Citrus Citrus Code Citrus
    Mit dem vierten Parameter kannst du bestimmen, wie viele Zeichen nach dem angegebenen Versatz auf den Teilstring untersucht werden sollen.

    In diesen beiden Beispielen wurden folgende Teilstrings untersucht:
    ‚Code Citrus Citrus Code Citrus‘
    ‚Code Citrus Citrus Code Citrus‘
    Du kannst sowohl für den dritten als auch den vierten Parameter negative Zahlen übergeben. Bei negativem Versatz wird ein Wert relativ zum Ende des Strings statt vom Anfang angenommen.

    $string = 'phpphpphp';
    echo substr_count($string, 'php', -6);
    // 2

    Das entspricht diesem Teilstring: ‚phpphpphp
    Dasselbe gilt für die Länge.

    echo substr_count($string, 'php', -6, -3);
    // 1

    Hier wurde nur dieser Teil untersucht: ‚phpphpphp‘

    Vorkommen einzelner Zeichen mit PHP count_chars ermitteln

    Die Funktion count_chars zählt das Vorkommen einzelner Zeichen in einem String. Die Ergebnisse variieren je nach verwendetem Modus.

    count_chars($string, $modus)
        $string (erforderlich)
            Der String dessen Zeichen gezählt werden
        $modus (optional)
            Wert der Angibt, wie das Ergebnis zurückgegeben wird
            Standardwert ist 0

    Wenn du an count_chars nur einen String übergibst, erhältst du als Rückgabewert ein Array mit allen Byte-Werten und der Anzahl an Vorkommnisse des zugehörigen Buchstaben.

    $string = 'CodeCitrus';
    print_r(count_chars($string));

    Output (gekürzt):

    Array(
        [0] => 0
        [1] => 0
        …
        [100] => 1
        [101] => 1
        …    
        [254] => 0
        [255] => 0
    )

    Wenn du beim Aufruf der Funktion $modus auf 1 setzt, erhältst du ein ähnliches Array, allerdings nur mit Werten, die auch im String vorhanden sind.

    print_r(count_chars($string, 1));

    Output (gekürzt):

    Array(
        [67] => 2
        [100] => 1
        [101] => 1
        [105] => 1
        …
    )

    count_chars($string, 2) gibt ein Array mit allen Bytewerten der verwendeten Zeichen zurück, die nicht in dem String vorhanden sind.
    Mit 3 für $modus erhalten wir einen String mit allen verwendeten Buchstaben.

    echo count_chars($string, 3);
    // Cdeiorstu

    Mit $modus = 4 gibt count_chars einen String mit allen nicht verwendeten Zeichen aus.
    Hier eine kurze Übersicht über die 5 möglichen Modi:

    0 – Array mit Byte-Werten als Schlüssel und Häufigkeit als Wert
    1 – wie 0, allerdings nur Werte, die mindestens einmal vorkommen
    2 – wie 0, allerdings nur Werte, die nicht vorkommen
    3 – String mit allen vorkommenden Zeichen
    4 – String mit allen nicht vorkommenden Zeichen

    Anzahl der Wörter eines Strings mit str_word_count ermitteln

    Mit str_word_count kannst du die Anzahl an Wörtern in einem String zählen.

    str_word_count($string, $format, $zeichenliste)
        $string
            Der String der gezählt wird
        $format (optional)
            Das Format, in dem die Rückgabe erfolgt
        $zeichenliste (optional)
            Zeichen, die als Bestandteile von Worten betrachtet werden

    Der einfache Aufruf, mit nur einem String als Parameter, gibt die Anzahl gefundenen Wörter als Integer zurück.

    echo str_word_count('foo bar baz');
    // 3

    Wenn du als zweiten Parameter 1 oder 2 angibst, erhältst du als Rückgabewert ein Array mit allen gefundenen Worten.
    Bei 2 wird zusätzlich als Schlüssel für die Worte die Position im String angegeben.

    0 – Anzahl gefundener Wörter als Integer
    1 – Array mit allen gefundenen Wörtern
    2 – Array, dessen Schlüssel die Position des Wortes angibt

    Hier ein Beispiel für 1 und 2:

    print_r(str_word_count($string, 1));
    // Array ( [0] => foo [1] => bar [2] => baz )
    print_r(str_word_count($string, 2));
    // Array ( [0] => foo [4] => bar [8] => baz )

    Mit dem dritten Parameter, $zeichenliste, kannst du Zeichen angeben, die als Bestandteile von Worten betrachtet werden.
    Normalerweise würde die Angabe von Zahlen ein Word trennen.

    $string = 'foo5bar baz';
    
    echo str_word_count($string);
    // 3
    
    print_r(str_word_count($string, 1));
    // Array ( [0] => foo [1] => bar [2] => baz )
    
    print_r(str_word_count($string, 2));
    // Array ( [0] => foo [4] => bar [8] => baz )

    Wenn du 5 als Teil eines Wortes in $zeichenliste festlegst, wird dieses dadurch nicht mehr geteilt.

    echo str_word_count($string, 0, '5');
    // 2
    
    print_r(str_word_count($string, 1, '5'));
    // Array ( [0] => foo5bar [1] => baz )
    
    print_r(str_word_count($string, 2, '5'));
    // Array ( [0] => foo5bar [8] => baz )

    Fazit

    Um die Länge eines Strings in Bytes zu ermitteln, gibt es strlen.
    Mit mb_strlen und iconv_strlen kann die Anzahl Zeichen in einem Multibyte String ermittelt werden.
    Wie oft ein Teilstring in einem String auftaucht, kannst du mit substr_count erfragen. Informationen über die verwendeten Zeichen kannst du mit count_chars abfragen.
    Die Anzahl von Wörtern in einem String kannst du mit str_word_count ermitteln.

    Wenn du Fragen oder Anmerkungen hast, schreib es in die Kommentare!

    😩 Gelangweilt von den Udemy & YouTube-Tutorials?!

    Lerne spielerisch Python, Java & SQL und komme deiner gutbezahlten (und an der 🌴 liegenden) Traumkarriere einen Schritt weiter.

    TP Star TP Star TP Star TP Star TP Star

    "Für Leute die gerne Python oder Java lernen wollen ist Codegree klasse. Ist nicht wie bei anderen Konkurrenten auf Videokursen aufgebaut..."

    - Lennart Sparbier

    100% kostenlos registrieren · keine Kreditkarte notwendig

    👋 Wir warten bereits auf dich!

    Lerne das, was du wirklich brauchst.

    Im Gegensatz zu der Abendschule oder der alteingesessenen Uni lernst du bei codegree die Sprachen & Pakete, die wirklich im Jobmarkt gesucht werden.

    Logo von Python
    Logo von PyTorch
    Logo von Pandas
    Logo von Matplotlib
    Logo von Java
    Logo von NumPy
    Mehr erfahren

    100% kostenlos registrieren · keine Zahlungsdaten notwendig