Navigation
 Startseite
 Fachbücher
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 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

Script Mods
 phpBB Adsense Mode

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

Partner
 Sprüche Treff

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

PHP strlen(): Stringlänge präzise bestimmen – inkl. Multibyte-Unterschieden

Sie befinden sich: Home > Php Tutorial > Ermitteln der Länge einer...

Ermitteln der Länge einer Zeichenkette


Eintrag am:  17.12.2009
Hits / Besucher:  7213
Sprache:  Deutsch
Kategorie:  Fortgeschrittene...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Viele typische Aufgaben in der Webentwicklung hängen davon ab, wie lang ein String tatsächlich ist.

Modernes Titelbild zur PHP-Funktion strlen() mit abstrahiertem PHP-Logo, Messleiste und buntem String, bei dem mehrbyte-Zeichen hervorgehoben sind.

Einleitung: Die Bedeutung von Stringlängen in PHP

Die Ermittlung der Stringlänge zählt zu den häufigsten Aufgaben bei der Arbeit mit PHP. Gründe gibt es viele: Ob du Benutzereingaben prüfst, Texte auf eine bestimmte Länge bringst oder kontrollierst, ob Inhalte in eine Datenbankspalte passen – fast immer musst du wissen, wie lang ein String wirklich ist.

Dafür nutzt man in PHP meist die Funktion strlen(). Sie gilt als Standard, um die Länge eines Strings zu bestimmen. Doch Vorsicht: Was bei einfachen ASCII-Zeichen problemlos klappt, kann bei mehrbyteigen Zeichen wie Umlauten oder asiatischen Schriftzeichen im UTF-8-Format schnell zu falschen Ergebnissen führen – denn strlen() zählt nicht Zeichen, sondern Bytes.

Genau hier kommt mb_strlen() ins Spiel.

Im Folgenden findest du eine umfassende Anleitung, die alle Aspekte von strlen() und die typischen Stolperfallen bei der Arbeit mit Multibyte-Strings abdeckt.

Was genau macht PHP strlen()? Die Grundlagen

Die Funktion strlen() zählt die Bytes eines Strings, nicht die sichtbaren Zeichen. Bei ASCII-Texten entspricht ein Byte immer einem Zeichen. Bei UTF-8 und anderen Multibyte-Kodierungen besteht ein sichtbares Zeichen oft aus mehreren Bytes. Deshalb liefert strlen() bei Umlauten oder Symbolen meist einen höheren Wert, als du Zeichen siehst. Die Funktion gibt immer einen Integer zurück, der die Byte-Länge des Strings angibt.

Sonderfall:
Wird ein leerer String übergeben, gibt strlen() den Wert 0 zurück.

Syntax von strlen()

/** Ermittelt die Länge eines Strings in Bytes */ 

int strlen(string $sText);
  • $sText: Der zu untersuchende String (obligatorisch).

Einfache strlen() Beispiele

Beispiel 1: ASCII-String

$sText = "Hallo"; 

/** Gibt 5 zurück, da "Hallo" fünf ASCII-Zeichen enthält */

$iLaenge = strlen($sText);

echo $iLaenge;

// Ausgabe: 5

Beispiel 2: String mit Leerzeichen und Satzzeichen

$sText = "Guten Tag!"; 

/** Leerzeichen und Satzzeichen zählen mit */

$iLaenge = strlen($sText);

echo $iLaenge;

// Ausgabe: 10

Beispiel 3: Leerer String

$sText = ""; 

/** Gibt 0 zurück, da der String leer ist */

$iLaenge = strlen($sText);

echo $iLaenge;

// Ausgabe: 0

Der kritische Punkt: strlen() und Zeichenkodierungen (ASCII vs. UTF-8)

Gerade bei internationalen Websites stößt man schnell an Grenzen, wenn man Zeichenlängen nicht von Bytelängen unterscheidet.

Das Problem:
Viele Sprachen und Sonderzeichen werden in modernen Webanwendungen als UTF-8 gespeichert. Hier kann ein Zeichen mehr als ein Byte beanspruchen.

  • Single-Byte-Kodierungen (ASCII, ISO-8859-1):
    1 Zeichen = 1 Byte → strlen() zählt korrekt die Zeichen.

  • Multi-Byte-Kodierungen (UTF-8):
    Ein Zeichen kann 1–4 Bytes beanspruchen (z. B. „ä“, „ß“, „中“).
    strlen() zählt aber immer die Bytes – nicht die sichtbaren Zeichen.

Typisches Problem-Beispiel:

$sText = "Mädchen"; 

/** "ä" ist in UTF-8 zwei Bytes lang */

echo strlen($sText);

// Ausgabe: 8 (statt 7!)
String Sichtbare Zeichen strlen() (Bytes)
Hallo 5 5
Grüße 6 7 (wegen “ü”)
Überflieger 12 13 (wegen “Ü”)
中华 2 6

Die Lösung für korrekte Zeichenanzahl: mb_strlen()

mb_strlen() stammt aus der Multibyte String Extension (mbstring) und zählt die tatsächliche Zeichenanzahl auch bei UTF-8 korrekt.

Syntax:

int mb_strlen(string $sText, ?string $sKodierung = null) 
  • $sKodierung: Optional. Häufig „UTF-8“. Wenn nicht angegeben, nutzt PHP die Standardkodierung (meist systemabhängig).

Beispiel: strlen() vs. mb_strlen() mit Umlauten

$sText = "Grüße"; 

/** strlen() zählt Bytes */

echo strlen($sText); // Ausgabe: 7

/** mb_strlen() zählt Zeichen */

echo mb_strlen($sText, 'UTF-8'); // Ausgabe: 5

Beispiel: Chinesische Zeichen

$sText = "中文"; 

/** strlen() zählt Bytes */

echo strlen($sText); // Ausgabe: 6

/** mb_strlen() zählt Zeichen */

echo mb_strlen($sText, 'UTF-8'); // Ausgabe: 2

Empfehlung:
Verwende immer mb_strlen($sText, 'UTF-8') für Benutzereingaben oder internationale Inhalte.

Typische Anwendungsfälle für strlen() (und mb_strlen())

Ob Anmeldemaske, Kommentarspalte oder Passwortfeld – oft entscheidet die Stringlänge darüber, ob eine Eingabe akzeptiert wird.

Validierung von Benutzereingaben

Beispiel: Mindest- und Maximallänge für Benutzernamen prüfen

$sName = "Müller"; 

/** strlen() ist hier NICHT ausreichend */

if (mb_strlen($sName, 'UTF-8') < 3 || mb_strlen($sName, 'UTF-8') > 20) {

echo "Name zu kurz oder zu lang!";

}

Textkürzung und Vorschauen

$sText = "Dies ist ein Beispieltext mit Umlauten: äöü"; 

/** Nur die ersten 10 Zeichen anzeigen (korrekt bei UTF-8!) */

$sVorschau = mb_substr($sText, 0, 10, 'UTF-8');

echo $sVorschau;

Bedingte Logik und Schleifen

$sCode = "ABC123"; 

/** Aktionen basierend auf Länge ausführen */

if (strlen($sCode) === 6) {

/** Code ist korrekt lang */

}

Datenbankinteraktionen

Datenbankfelder sind oft in Zeichen (CHAR, VARCHAR) oder Bytes (z. B. BLOB) definiert.
Achtung: MySQL mit UTF-8 speichert Zeichen als mehrere Bytes! Prüfe immer die Kodierung und nutze ggf. mb_strlen() für die Validierung.

Was passiert mit strlen() bei anderen Datentypen? (Edge Cases)

  • strlen(null): Gibt 0 zurück, erzeugt aber eine Warnung (PHP < 8). Ab PHP 8: TypeError.
  • strlen(array): Gibt null zurück, E_WARNING (PHP < 8). PHP 8: TypeError.
  • strlen(int/float): Wandelt Zahl in String um, gibt Länge dieses Strings zurück.
  • strlen(true): Wird zu “1” (Länge 1), false zu “” (Länge 0).

Empfehlung: Immer Typ prüfen:

if (!is_string($mWert)) { 

/** Typ-Fehlerbehandlung */

}

Oder mit Cast:

$sText = (string)$mWert; 

$iLaenge = strlen($sText);

Performance-Überlegungen

strlen() arbeitet direkt auf dem Speicher, daher ist sie extrem schnell – selbst bei großen Strings oder in Schleifen.
mb_strlen() ist etwas langsamer, da Zeichen analysiert werden. In den allermeisten Fällen spielt der Unterschied keine Rolle – Korrektheit geht immer vor Mikro-Optimierung.

Verwandte PHP String-Funktionen

  • count() – Gibt die Anzahl von Elementen in Arrays zurück, nicht für Stringlänge.
  • substr() / mb_substr() – Teilstrings extrahieren (mit UTF-8-Unterstützung über mb_substr).
  • strpos() / mb_strpos() – Position von Zeichen/Substrings finden.
  • trim() – Entfernt Whitespace an den Rändern, was die Länge beeinflussen kann.

Best Practices bei der Verwendung von strlen() und mb_strlen()

Eine falsche Annahme bei der Zeichencodierung kann zu unbemerkten Fehlern führen, die später schwer zu finden sind.

  • Kenne deine Daten! Prüfe immer, ob du mit Multibyte-Zeichen arbeitest.
  • Immer explizite Kodierung! Bei mb_strlen() „UTF-8“ explizit angeben, nicht auf Standard verlassen.
  • Byte vs. Zeichen: Sei dir bewusst, ob du wirklich Bytes (z. B. für binäre Daten) oder Zeichen zählst (Textverarbeitung).
  • Vorher Typ prüfen: Vermeide Fehler und Warnungen, indem du vorab prüfst oder castest.

Fazit: Die richtige Funktion für die richtige Aufgabe

strlen() eignet sich für ASCII-Strings und Fälle, in denen die Byte-Anzahl zählt – zum Beispiel bei binären Daten oder reinen ASCII-Feldern.
mb_strlen() ist Pflicht für alles, was mit internationalem Text, Benutzer-Input oder moderner Webentwicklung zu tun hat. Prüfe immer, was du wirklich brauchst, und teste im Zweifel mit verschiedenen Zeichensätzen!

Interaktives Code-Snippet

$sText = "Grüße aus Erfurt"; 

/** Gibt die Länge in Bytes und Zeichen (UTF-8) aus */

echo "strlen: " . strlen($sText) . "n";

echo "mb_strlen: " . mb_strlen($sText, 'UTF-8') . "n";

/** Ausgabe:
strlen: 18
mb_strlen: 16
*/

 

Tags:

 

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.