Start · Sprachen · PHP · Referenz · iconv_strlen

iconv_strlen

Funktion

Gibt die Anzahl der Zeichen (nicht Bytes) eines Strings in einer bestimmten Zeichenkodierung zurück.

seit PHP 5.0.0 Kategorie: string

Signatur

iconv_strlen(string $string, ?string $encoding = null): int|false

Beschreibung

iconv_strlen() ermittelt die Länge eines Strings gemessen in Zeichen – im Gegensatz zu strlen(), das die Anzahl der Bytes zurückgibt. Dies ist besonders wichtig bei Multibyte-Kodierungen wie UTF-8, EUC-JP oder GB2312, bei denen ein einzelnes Zeichen mehrere Bytes belegen kann.

Der optionale Parameter encoding legt die Zeichenkodierung fest, in der der String interpretiert wird. Wird er weggelassen oder auf null gesetzt, verwendet die Funktion die interne Kodierung, die mit iconv_set_encoding() bzw. der INI-Direktive iconv.internal_encoding gesetzt wurde.

Die Funktion ist Teil der iconv-Erweiterung und ergänzt die Möglichkeiten von mb_strlen() aus der Multibyte-String-Erweiterung. Wann immer mit Strings in nicht-ASCII-Kodierungen gearbeitet wird – etwa bei der Verarbeitung von Benutzereingaben in Unicode – sollte iconv_strlen() statt strlen() eingesetzt werden, um korrekte Zeichenanzahlen zu erhalten.

Schlägt die Funktion fehl (z. B. bei einer ungültigen Kodierungsangabe), gibt sie false zurück.

Parameter

Name Typ Default Beschreibung
$string Pflicht string Der Eingabe-String, dessen Zeichenanzahl ermittelt werden soll.
$encoding ?string null Die Zeichenkodierung des Strings, z. B. "UTF-8", "ISO-8859-1" oder "EUC-JP". Wird null übergeben oder der Parameter weggelassen, wird die interne iconv-Kodierung verwendet.

Rückgabewert

Typ
int|false
Beschreibung
Gibt die Anzahl der Zeichen im String als int zurück. Bei einem Fehler – etwa einer ungültigen Kodierungsangabe – wird false zurückgegeben.

Beispiele

Zeichenanzahl eines UTF-8-Strings ermitteln

<?php
$text = "Héllo Wörld";

// strlen() liefert die Byte-Anzahl, nicht die Zeichen-Anzahl
echo strlen($text) . PHP_EOL;          // Falsch für Multibyte

// iconv_strlen() liefert die korrekte Zeichen-Anzahl
echo iconv_strlen($text, 'UTF-8') . PHP_EOL; // Korrekt
?>
13 11

Japanischen Text in EUC-JP korrekt messen

<?php
// Japanischer Text in UTF-8
$japanese = "日本語";

// Byte-Anzahl in UTF-8 (3 Bytes pro Zeichen)
echo strlen($japanese) . PHP_EOL;

// Zeichen-Anzahl korrekt ermitteln
echo iconv_strlen($japanese, 'UTF-8') . PHP_EOL;

// Konvertierung nach EUC-JP und Messung in dieser Kodierung
$eucjp = iconv('UTF-8', 'EUC-JP', $japanese);
echo iconv_strlen($eucjp, 'EUC-JP') . PHP_EOL;
?>
9 3 3

Fallbehandlung bei ungültiger Kodierung

<?php
$text = "Hallo";
$result = iconv_strlen($text, 'UNGUELTIGE-KODIERUNG');

if ($result === false) {
    echo "Fehler: Ungültige Kodierung angegeben." . PHP_EOL;
} else {
    echo "Zeichenanzahl: " . $result . PHP_EOL;
}
?>
Fehler: Ungültige Kodierung angegeben.

// Wichtig · Fallstricke

Verwechslungsgefahr mit strlen(): strlen() gibt die Anzahl der Bytes zurück, nicht der Zeichen. Bei reinen ASCII-Strings (ein Byte pro Zeichen) liefern beide Funktionen dasselbe Ergebnis. Bei Multibyte-Kodierungen wie UTF-8 weichen die Werte ab.

Alternative: Die Funktion mb_strlen() aus der mbstring-Erweiterung bietet ähnliche Funktionalität und ist in vielen PHP-Umgebungen die bevorzugte Wahl, da mbstring häufiger standardmäßig aktiviert ist als iconv.

Interne Kodierung: Wird encoding weggelassen, greift die Funktion auf die interne iconv-Kodierung zurück. Diese sollte mittels iconv_set_encoding('internal_encoding', 'UTF-8') oder der php.ini-Direktive explizit gesetzt werden, um unerwartete Ergebnisse zu vermeiden.