Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Lernpfade
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 Unit Test Generator
 TLD Liste
 Webkatalog‑Verzeichnis

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP str_word_count(): Wörter im Text zählen und extrahieren

Sie befinden sich: Home > Php Tutorial > PHP str_word_count(): Wörte...

PHP str_word_count(): Wörter im Text zählen und extrahieren
Eintrag am:
04.08.2026
Hits / Besucher:
14
Sprache:
  Deutsch
Tutorial Art:
eigenes
Eingetragen von:
Merkliste:
 
Beschreibung

Lesezeit-Angaben unter Blog-Überschriften, Wortzähler in Redaktionssystemen und Tag-Clouds haben eines gemeinsam: Irgendwo im Hintergrund muss jemand die Wörter eines Textes zählen. PHP bringt dafür eine eigene Funktion mit, die das in einer einzigen Zeile erledigt und auf Wunsch auch die Wortliste oder die Positionen der einzelnen Begriffe zurückgibt. Dieses Tutorial zeigt, was die Funktion leistet, wo ihre Grenzen liegen und welche Alternative bei deutschsprachigen Texten die verlässlichere Wahl ist.

Was macht die Funktion PHP str_word_count()?

Wer in PHP die Anzahl der Wörter eines Artikels bestimmen, eine Wortliste für ein Tag-Cloud-Skript bauen oder die Position einzelner Begriffe in einem String ermitteln möchte, greift zu PHP str_word_count. Die Funktion analysiert einen String und zählt die enthaltenen Wörter, sie gibt zurück je nach gewähltem Modus einen Integer mit der Wortanzahl, ein Array aller Wörter oder ein assoziatives Array mit Wortpositionen als Schlüssel.

Illustration zum Tutorial: PHP str_word_count(): Wörter im Text zählen und extrahieren

Bevor die drei Modi und die Charliste im Detail folgen, ein wichtiger Hinweis zur Wortdefinition, die sich besonders für deutschsprachige Texte als Stolperfalle erweist.

Die Mechanik wirkt zunächst einfach, doch im Hintergrund steckt eine eigene Wortdefinition: ein Wort besteht standardmäßig aus alphabetischen Zeichen plus optional Apostroph und Bindestrich. Genau hier liegt auch die Schwäche: Umlaute werden im Default nicht als Wortzeichen erkannt, was die Funktion für rein deutschsprachige Texte unzuverlässig macht. Wer das versteht, kann PHP str_word_count gezielt einsetzen oder bewusst zur preg_match_all-Variante wechseln.

Syntax und die drei Modi

Die Signatur erwartet einen String, optional einen Modus und optional eine Charliste mit zusätzlichen Wortzeichen. Der Default-Modus ist 0 und liefert die Wortanzahl als Integer.

<?php

str_word_count(
string $string,
int $format = 0,
?string $characters = null
): array|int

Die drei möglichen Modi sind klar getrennt: 0 für die reine Zählung, 1 für eine Wortliste, 2 für die Wortpositionen. Die Charliste ist optional und erweitert die Standard-Definition um eigene Zeichen wie Punkt, Slash oder Ziffern. Sie ist besonders nützlich, wenn Strings wie 'Vue.js' oder 'PHP-Backend' als ein Wort gezählt werden sollen.

Modus 0 - Wortanzahl als Integer

Im Default-Modus liefert PHP str_word_count die Anzahl der Wörter zurück. Das ist die schnellste Form, wenn nur die Zahl interessiert, etwa für ein Lesezeit-Badge oder eine Statistik im Backend.

<?php

$text = 'Wer schreibt der bleibt';
echo str_word_count($text);
/* 4 */

echo str_word_count('Ein langer Text mit vielen Woertern und Saetzen');
/* 8 */

Der Aufruf ist in einer Zeile erledigt. Wer Echtzeit-Statistiken braucht, kann PHP str_word_count direkt in Templates oder Datenbank-After-Save-Hooks einbauen. Da die Funktion in C implementiert ist, fällt der Aufruf selbst bei langen Texten kaum ins Gewicht.

Modus 1 - Wortliste als Array

Modus 1 liefert ein numerisch indiziertes Array aller Wörter im Text. Damit lassen sich Filter, Mapping oder Tag-Clouds bauen.

<?php

$text = 'Wer schreibt der bleibt schreibt zweimal';
$woerter = str_word_count($text, 1);
print_r($woerter);
/* [Wer, schreibt, der, bleibt, schreibt, zweimal] */

$haeufigkeit = array_count_values($woerter);
print_r($haeufigkeit);
/* [Wer => 1, schreibt => 2, der => 1, bleibt => 1, zweimal => 1] */

Die Kombination mit array_count_values() erzeugt eine fertige Häufigkeitsverteilung und ist die Basis für einfache Statistiken oder Tag-Clouds. Wer einen Stop-Word-Filter braucht, kombiniert mit array_diff() und einer Liste von Allerwelts-Wörtern.

Modus 2 - Wortpositionen als assoziatives Array

Modus 2 liefert ein assoziatives Array, bei dem die Position des Wortes als Schlüssel und das Wort selbst als Wert steht. Diese Form ist die richtige Wahl für Highlight-Funktionen oder Editor-Kontextmenües, in denen das genaue Offset gebraucht wird.

<?php

$text = 'Wer schreibt der bleibt';
$positionen = str_word_count($text, 2);
print_r($positionen);
/* [
0 => 'Wer',
4 => 'schreibt',
13 => 'der',
17 => 'bleibt'
] */

Wichtig zu wissen: Die Position ist die Byte-Position, nicht die Zeichen-Position. Bei reinem ASCII ist das identisch, sobald aber Multibyte-Zeichen wie Emoji oder Umlaute im Spiel sind, wird die Zählung verschoben. Wer die Position für JavaScript-basierte Highlighter weitergibt, sollte in der Frontend-Logik berücksichtigen, dass JavaScript zeichenbasiert arbeitet.

Custom Charliste für Sonderzeichen

Mit dem dritten Parameter lässt sich die Wortdefinition erweitern. Wer Bindestrich-Verbindungen oder Domains als ein Wort gezählt haben möchte, fügt die Sonderzeichen in die Liste ein.

<?php

$text = 'PHP-Backend und Vue.js sind im Stack';

$ohne = str_word_count($text, 1);
print_r($ohne);
/* [PHP, Backend, und, Vue, js, sind, im, Stack] */

$mit = str_word_count($text, 1, '-.');
print_r($mit);
/* [PHP-Backend, und, Vue.js, sind, im, Stack] */

Auch Ziffern lassen sich auf diesem Weg einbinden. Wer einen Text wie '123 Tage 4 Stunden' als drei Wörter zählen will, gibt '0..9' als Charliste mit. PHP str_word_count interpretiert die Liste als Zeichenmenge, vergleichbar mit einer Zeichenklasse in regulären Ausdrücken.

Multibyte-Schwäche und Workaround mit preg_match_all

Die größte Schwäche von PHP str_word_count zeigt sich bei deutschen Texten mit Umlauten. Im Default werden Umlaute nicht als Wortzeichen erkannt, ein Wort wie 'Schöne' wird in 'Sch' und 'ne' zerlegt. Das Ergebnis ist regelmäßig falsch.

<?php

$text = 'Schoene Mueller-Buecher gelesen';

$standard = str_word_count($text);
echo "str_word_count: $standard" . "\n";
/* meist 5 oder 6, je nach PHP-Locale */

preg_match_all('/[\p{L}\p{N}]+/u', $text, $treffer);
echo "preg_match_all: " . count($treffer[0]) . "\n";
/* 3 - korrekt */

Die Workaround-Variante mit preg_match_all() und dem Unicode-Property \p{L} (Letter) ist die UTF-8-saubere Lösung. Sie erkennt Umlaute, Akzente und andere Zeichen aus beliebigen Schriftsystemen. Für deutschsprachige Inhalte ist diese Variante die deutlich verlässlichere Wahl.

Praxisbeispiel Lesezeit-Schätzung

Ein klassischer Anwendungsfall ist die Lesezeit-Schätzung für Blog-Artikel. Die typische Annahme sind 200 Wörter pro Minute. PHP str_word_count liefert die Wortzahl, eine Division mit ceil() macht daraus die Minutenanzahl.

<?php

function lesezeit(string $text, int $woerterProMin = 200): string
{
/* multibyte-sicher mit preg_match_all */
preg_match_all('/[\p{L}\p{N}]+/u', $text, $m);
$anzahl = count($m[0]);
$minuten = max(1, (int)ceil($anzahl / $woerterProMin));
return "$minuten Min Lesezeit ($anzahl Woerter)";
}

echo lesezeit('Ein langer Artikel mit vielen Woertern...');
/* z.B. 1 Min Lesezeit (6 Woerter) */

In einem Tutorial-Portal oder Magazin-System lohnt es sich, die Lesezeit beim Speichern eines Artikels einmal zu berechnen und in einer eigenen Spalte zu sichern. Bei jeder Anzeige ist die Information dann ohne erneute Berechnung verfügbar. Wer die einfache Variante mit PHP str_word_count nutzt, sollte im Hinterkopf behalten, dass deutsche Texte mit vielen Umlauten zu hoch gezählt werden, weil ein Umlaut das Wort trennt.

Welcher Modus und welche Funktion im Einzelfall passt, lässt sich in einem kurzen Entscheidungsweg zusammenfassen.


flowchart TD
    A[Text als Eingabe] --> B{Welcher Modus?}
    B -->|0| C[Integer Anzahl]
    B -->|1| D[Array aller Woerter]
    B -->|2| E[Array mit Wortpositionen]
    A --> F{UTF-8 mit Umlauten?}
    F -->|ja| G[preg_match_all mit u-Flag]
    F -->|nein| B

Fazit

Mit PHP str_word_count steht ein schneller Helfer für Wortanalysen bereit. Im Vergleich zu anderen String-Funktionen wie substr_count oder preg_match_all ist sie speziell auf Wortzählung zugeschnitten. Die drei Modi decken Zählung, Liste und Position ab, die Custom-Charliste erlaubt eigene Wortdefinitionen mit Bindestrich, Punkt oder Ziffern. Die Funktion zeigt jedoch eine deutliche Schwäche bei Texten mit Umlauten, weil sie im Default nur ASCII-Buchstaben als Wortzeichen erkennt. Für deutschsprachige Inhalte ist preg_match_all('/[\p{L}\p{N}]+/u', ...) die UTF-8-saubere Alternative. Wer beide Werkzeuge kennt und den Multibyte-Stolperstein vermeidet, kann PHP str_word_count für schnelle Statistiken einsetzen und greift bei produktionsreifen Lesezeit-Schätzungen auf die preg_match_all-Variante zurück.

 

Tags:

 

 

Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.