Start · Sprachen · PHP · Referenz · ctype_cntrl

ctype_cntrl

Funktion

Prüft, ob alle Zeichen des übergebenen Strings Steuerzeichen (Control Characters) sind.

seit PHP 4.0.4 Kategorie: string

Signatur

ctype_cntrl(mixed $text): bool

Beschreibung

ctype_cntrl() überprüft, ob alle Zeichen im übergebenen String Steuerzeichen sind. Steuerzeichen sind nicht druckbare Zeichen im ASCII-Bereich 0–31 sowie 127 (DEL), also beispielsweise Zeilenumbrüche (\n), Wagenrücklauf (\r), Tabulatoren (\t), Null-Bytes (\0) und ähnliche.

Die Funktion gibt true zurück, wenn der übergebene String nicht leer ist und ausschließlich solche Steuerzeichen enthält. Sie eignet sich zur schnellen Validierung oder Erkennung von Rohdaten, Protokoll-Steuersignalen oder zum Aufspüren unerwünschter Steuerzeichen in Eingaben.

Typische Einsatzbereiche sind die Validierung von Benutzereingaben (um reine Steuerzeichenfolgen abzulehnen), die Analyse von Binärprotokollen oder das Testen, ob ein String nur aus Zeilenumbrüchen und ähnlichen Zeichen besteht.

Hinweis: Ab PHP 8.1 wird ein Leerstring ('') als ungültig betrachtet und gibt false zurück. In älteren PHP-Versionen warf die Übergabe eines Integer-Wertes ein abweichendes Verhalten (Prüfung des ASCII-Zeichens mit diesem Codepunkt).

Parameter

Name Typ Default Beschreibung
$text Pflicht mixed Der zu prüfende String. Vor PHP 8.1 konnte auch ein int übergeben werden, der dann als ASCII-Zeichencode interpretiert wurde. Ab PHP 8.1 wird bei Nicht-String-Werten false zurückgegeben.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn text nicht leer ist und alle enthaltenen Zeichen Steuerzeichen (ASCII 0–31 und 127) sind. Andernfalls wird false zurückgegeben — auch bei leerem String.

Beispiele

Einfache Prüfung auf Steuerzeichen

<?php
// Nur Steuerzeichen: Zeilenumbruch, Tab, Wagenrücklauf
$onlyControl = "\n\t\r";
var_dump(ctype_cntrl($onlyControl)); // true

// Gemischter String: enthält auch druckbares Zeichen
$mixed = "\nHello";
var_dump(ctype_cntrl($mixed)); // false

// Leerer String
var_dump(ctype_cntrl('')); // false

// Nur ein Null-Byte
var_dump(ctype_cntrl("\0")); // true
bool(true) bool(false) bool(false) bool(true)

Eingabevalidierung: Steuerzeichen-Strings ablehnen

<?php
function validateInput(string $input): string {
    if (ctype_cntrl($input)) {
        throw new InvalidArgumentException(
            'Eingabe darf nicht ausschließlich aus Steuerzeichen bestehen.'
        );
    }
    return $input;
}

try {
    echo validateInput("\x01\x02\x03");
} catch (InvalidArgumentException $e) {
    echo 'Fehler: ' . $e->getMessage();
}

try {
    echo validateInput("Hallo Welt");
} catch (InvalidArgumentException $e) {
    echo 'Fehler: ' . $e->getMessage();
}
Fehler: Eingabe darf nicht ausschließlich aus Steuerzeichen bestehen. Hallo Welt

// Wichtig · Fallstricke

Verhalten bei Ganzzahlen (vor PHP 8.1): In PHP-Versionen vor 8.1 wurde ein übergebener int-Wert als ASCII-Zeichencode interpretiert, d. h. ctype_cntrl(10) prüfte das Zeichen mit dem ASCII-Code 10 (\n). Ab PHP 8.1 gibt die Funktion in diesem Fall immer false zurück.

Nur vollständige Steuerzeichen-Strings: Die Funktion gibt nur dann true zurück, wenn alle Zeichen des Strings Steuerzeichen sind. Ein einziges druckbares Zeichen führt zu false.

Keine Multibyte-Unterstützung: ctype_cntrl() arbeitet byteweise und ist nicht für Multibyte-Zeichenkodierungen (z. B. UTF-8 mit mehrbyteigen Zeichen) ausgelegt. Für solche Fälle sollten reguläre Ausdrücke mit preg_match() verwendet werden.