Signatur
Beschreibung
grapheme_strlen() ermittelt die Anzahl der Graphem-Cluster in einem UTF-8-kodierten String. Ein Graphem-Cluster ist das, was ein Mensch als einzelnes Zeichen wahrnimmt – zum Beispiel ein Buchstabe mit einem kombinierten Akzent-Zeichen, das technisch aus mehreren Unicode-Codepunkten besteht, aber visuell als ein Zeichen erscheint.
Dies unterscheidet sich grundlegend von strlen() (zählt Bytes), mb_strlen() (zählt Codepunkte) und grapheme_strlen() (zählt wahrnehmbare Zeichen). Für Sprachen mit kombinierten Diakritika (z. B. Devanagari, Arabisch, Emoji mit Modifier) ist grapheme_strlen() die korrekteste Methode zur Längenberechnung.
Die Funktion ist Teil der Intl-Extension (International Components for Unicode) und folgt dem Unicode-Standard für Graphem-Cluster-Segmentierung. Der Eingabe-String muss in UTF-8 kodiert sein.
Typische Anwendungsfälle sind die Validierung von Formulareingaben (z. B. maximale Zeichenanzahl aus Nutzersicht), die korrekte Darstellung von Zeichenanzahlen in Texteditoren sowie die Verarbeitung von Emoji-Strings.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der zu messende UTF-8-kodierte Eingabe-String, dessen Länge in Graphem-Einheiten bestimmt werden soll. |
Rückgabewert
int zurück, oder false bei einem Fehler (z. B. ungültige UTF-8-Eingabe).Beispiele
Vergleich von strlen, mb_strlen und grapheme_strlen
<?php
// Ein 'e' mit kombiniertem Akzent (e + ́ als separate Codepunkte)
$string = "e\u{0301}"; // e + Combining Acute Accent
echo strlen($string); // Bytes
echo PHP_EOL;
echo mb_strlen($string); // Unicode-Codepunkte
echo PHP_EOL;
echo grapheme_strlen($string); // Graphem-Cluster (sichtbare Zeichen)
Emoji mit Modifier korrekt zählen
<?php
// Emoji mit Hautfarben-Modifier bestehen aus mehreren Codepunkten,
// sind aber visuell ein einzelnes Zeichen.
$emoji = "\u{1F44D}\u{1F3FD}"; // 👍 + mittlerer Hautfarben-Modifier
echo 'strlen: ' . strlen($emoji) . PHP_EOL;
echo 'mb_strlen: ' . mb_strlen($emoji) . PHP_EOL;
echo 'grapheme_strlen: ' . grapheme_strlen($emoji) . PHP_EOL;
// Praktische Validierung: Nutzereingabe maximal 10 sichtbare Zeichen
$input = "Hallo 👍🏽";
if (grapheme_strlen($input) <= 10) {
echo "Eingabe ist gültig." . PHP_EOL;
}
// Wichtig · Fallstricke
Voraussetzung: Die Intl-Extension muss in PHP aktiviert sein (üblicherweise via --enable-intl oder extension=intl in der php.ini). Ohne diese Extension steht die Funktion nicht zur Verfügung.
Der Eingabe-String muss UTF-8-kodiert sein. Bei anderen Kodierungen sollte der String zunächst mit mb_convert_encoding() in UTF-8 umgewandelt werden.
Bei der Verarbeitung von nutzergenerierten Inhalten (z. B. Formulare, Chat-Nachrichten) empfiehlt es sich, grapheme_strlen() statt mb_strlen() zu verwenden, wenn die sichtbare Zeichenzahl aus Nutzerperspektive relevant ist – beispielsweise bei Twitter-ähnlichen Zeichenbeschränkungen.