Start · Sprachen · PHP · Referenz · fgetss

fgetss

Funktion

Liest eine Zeile aus einer geöffneten Datei und entfernt dabei alle (oder ausgewählte) HTML- und PHP-Tags aus dem Ergebnis.

seit PHP 4.0.0 Kategorie: io

Signatur

fgetss(resource $handle, int $length = 0, string $allowable_tags = ''): string|false

Beschreibung

fgetss() funktioniert ähnlich wie fgets(), wendet jedoch zusätzlich strip_tags() auf die gelesene Zeile an, bevor sie zurückgegeben wird. Damit eignet sich die Funktion zum schnellen Einlesen von Text aus HTML- oder PHP-Dateien, wenn der rohe Tag-freie Inhalt benötigt wird.

Über den optionalen Parameter allowable_tags kann eine Liste von HTML-Tags angegeben werden, die nicht entfernt werden sollen – z. B. '<b><i>'. Alle anderen Tags werden aus der gelesenen Zeile gestrichen.

Die Funktion liest maximal length - 1 Bytes aus dem Stream. Wird kein length-Wert angegeben oder auf 0 gesetzt, liest sie bis zum Zeilenende. Der Dateizeiger rückt nach jedem Aufruf automatisch weiter.

Achtung: fgetss() wurde mit PHP 7.3.0 als veraltet (deprecated) markiert und in PHP 8.0.0 vollständig entfernt. Als Ersatz sollte fgets() in Kombination mit strip_tags() verwendet werden.

Parameter

Name Typ Default Beschreibung
$handle Pflicht resource Ein gültiger Datei-Handle, der z. B. mit fopen() geöffnet wurde.
$length int 0 Maximale Anzahl der zu lesenden Bytes. Wird 0 übergeben oder der Parameter weggelassen, liest die Funktion bis zum Ende der aktuellen Zeile.
$allowable_tags string Eine Zeichenkette mit HTML-Tags, die nicht entfernt werden sollen, z. B. '<b><strong>'. Alle anderen Tags werden aus dem gelesenen Text gestrichen.

Rückgabewert

Typ
string|false
Beschreibung
Gibt die gelesene Zeile ohne die gefilterten HTML-Tags als string zurück. Bei einem Fehler oder am Ende der Datei (EOF) wird false zurückgegeben.

Beispiele

HTML-Datei zeilenweise ohne Tags einlesen

<?php
// Beispiel-Datei: inhalt.html
// <h1>Willkommen</h1>
// <p>Dies ist ein <strong>Test</strong>.</p>

$handle = fopen('inhalt.html', 'r');
if ($handle) {
    while (!feof($handle)) {
        $zeile = fgetss($handle);
        if ($zeile !== false) {
            echo $zeile;
        }
    }
    fclose($handle);
}
Willkommen Dies ist ein Test.

Bestimmte Tags beim Lesen beibehalten

<?php
// Beispiel-Datei: inhalt.html
// <p>Ein <strong>wichtiger</strong> <em>Hinweis</em>.</p>

$handle = fopen('inhalt.html', 'r');
if ($handle) {
    while (!feof($handle)) {
        // <strong> wird beibehalten, <em> wird entfernt
        $zeile = fgetss($handle, 1024, '<strong>');
        if ($zeile !== false) {
            echo $zeile;
        }
    }
    fclose($handle);
}
Ein <strong>wichtiger</strong> Hinweis.

Moderner Ersatz mit fgets() und strip_tags()

<?php
// Empfohlene Alternative für PHP 7.3+ und PHP 8+
$handle = fopen('inhalt.html', 'r');
if ($handle) {
    while (!feof($handle)) {
        $zeile = fgets($handle);
        if ($zeile !== false) {
            echo strip_tags($zeile, '<strong>');
        }
    }
    fclose($handle);
}

// Wichtig · Fallstricke

Deprecation: fgetss() wurde in PHP 7.3.0 als veraltet markiert und in PHP 8.0.0 vollständig entfernt. Code, der diese Funktion verwendet, muss vor einer Migration auf PHP 8 angepasst werden. Die empfohlene Alternative ist fgets() in Kombination mit strip_tags().

Sicherheitshinweis: Das Entfernen von Tags durch fgetss() bietet keinen vollständigen Schutz vor XSS, da schädliche Inhalte auch ohne Tags (z. B. in Event-Attributen) übrig bleiben können. Für sicherheitskritische Anwendungen sollte ein dedizierter HTML-Purifier eingesetzt werden.

Die Funktion entfernt keine HTML-Entities wie &amp; oder &lt; – dafür ist ggf. html_entity_decode() zusätzlich nötig.