strip_tags()
Die PHP-Funktion strip_tags() entfernt HTML- und PHP-Tags aus einem String und hinterlässt nur den reinen Textinhalt.
Einführung
Die Funktion strip_tags() in PHP entfernt HTML-, XML- und PHP-Tags aus einem String und hinterlässt nur den reinen Textinhalt. Sie wird häufig verwendet, um vom Benutzer eingereichte oder Rich-Text-Inhalte in sauberen, tagfreien Text umzuwandeln — zum Beispiel beim Erstellen einer Kurzzusammenfassung, eines E-Mail-Texts im Nur-Text-Format oder einer sicher speicherbaren Version eines Kommentars.
Dieser Artikel behandelt die Syntax, sowohl erforderliche als auch optionale Parameter, praktische Beispiele, die in PHP 7.4 hinzugefügte Array-Form sowie die wichtigen Sicherheitshinweise, die Sie kennen müssen, bevor Sie sich auf diese Funktion verlassen.
Die Funktion strip_tags() verstehen
Die Funktion strip_tags() durchsucht den Eingabe-String und löscht alles, was wie ein HTML/XML-Tag aussieht (Text zwischen < und >), sowie PHP-Tags (<?php ... ?>). Der Text, der zwischen den Tags steht, bleibt erhalten. Die Syntax lautet wie folgt:
Die PHP-Syntax von strip_tags()
strip_tags(string $string, array|string|null $allowed_tags = null): stringHier ist, was jeder Parameter bewirkt:
$string— der Eingabe-String, aus dem Tags entfernt werden sollen. Dies ist der einzige erforderliche Parameter.$allowed_tags(optional) — eine Liste von Tags, die nicht entfernt werden sollen. Sie können diese als String von Tag-Namen ("<a><b>") oder seit PHP 7.4 als Array (["a", "b"]) übergeben. Wenn weggelassen (odernull), werden alle Tags entfernt.
Die Funktion gibt den resultierenden String zurück, bei dem alle nicht erlaubten Tags entfernt wurden. Sie verändert niemals den ursprünglichen String.
Hinweis: Kommentare (
<!-- ... -->) und<?php ... ?>-Blöcke werden immer entfernt und können nicht zur Erlaubnisliste hinzugefügt werden.
Verwendungsbeispiel
Schauen wir uns ein Beispiel an, um die Verwendung der Funktion strip_tags() in PHP zu verstehen:
Beispiel für PHP strip_tags()
Im obigen Beispiel verwenden wir die Funktion strip_tags(), um alle HTML- und PHP-Tags aus dem String zu entfernen. Der resultierende String Hello WorldThis is a paragraph. wird dann mit der echo-Anweisung auf dem Bildschirm ausgegeben.
Den Parameter $allowable_tags verwenden
Schauen wir uns ein weiteres Beispiel an, um zu verstehen, wie der Parameter $allowable_tags mit der Funktion strip_tags() verwendet werden kann:
Wie wird PHP strip_tags() verwendet?
Im obigen Beispiel verwenden wir die Funktion strip_tags(), um HTML- und PHP-Tags aus dem String zu entfernen. Wir geben das Tag <a> als erlaubtes Tag über den Parameter $allowed_tags an. Infolgedessen entfernt die Funktion die Tags <h1> und <p>, bewahrt jedoch deren Textinhalt, während das Tag <a> und sein Inhalt erhalten bleiben. Der resultierende String Hello WorldThis is a paragraph.<a href='https://www.example.com'>Example link</a> wird dann mit der echo-Anweisung auf dem Bildschirm ausgegeben.
Erlaubte Tags als Array übergeben (PHP 7.4+)
Seit PHP 7.4 können Sie die erlaubten Tags als Array statt als String übergeben. Dies ist einfacher zu lesen und weniger fehleranfällig als das Erstellen eines Strings im Stil "<a><b>":
<?php
$str = "<p>Hi</p><b>bold</b><i>italic</i>";
// String form (any PHP version)
echo strip_tags($str, "<p><b>"); // <p>Hi</p><b>bold</b>italic
echo "\n";
// Array form (PHP 7.4 and newer) — equivalent result
echo strip_tags($str, ["p", "b"]); // <p>Hi</p><b>bold</b>italicBeide Aufrufe behalten die Tags <p> und <b> und entfernen das Tag <i>, wobei in jeder Zeile <p>Hi</p><b>bold</b>italic ausgegeben wird.
Hinweis: strip_tags() validiert kein HTML. Es entfernt lediglich Tags basierend auf der angegebenen Erlaubnisliste, was möglicherweise fehlerhaftes oder nicht geschlossenes Markup in der Ausgabe hinterlässt.
Sicherheit: strip_tags() reicht nicht aus, um XSS zu verhindern
Ein weit verbreitetes Missverständnis ist, dass strip_tags() Benutzereingaben sicher zur Anzeige macht. Das tut es nicht. Die Funktion entfernt nur vollständige Tags — sie bereinigt nicht die Attribute von Tags, die Sie erlauben:
<?php
$input = '<a href="javascript:alert(1)" onclick="steal()">click me</a>';
// The <a> tag survives, attributes and all
echo strip_tags($input, "<a>");
// <a href="javascript:alert(1)" onclick="steal()">click me</a>Die gefährlichen Attribute href und onclick werden ungehindert durchgelassen. Für Ausgaben, die als HTML gerendert werden sollen, verwenden Sie htmlspecialchars(), um den Text zu escapen, oder einen dedizierten HTML-Sanitizer wie HTML Purifier, wenn Sie sicher einige Markup-Elemente erlauben möchten. Verwenden Sie strip_tags(), um reinen Text zu erzeugen, nicht um sicheres HTML zu erzeugen.
Häufige Anwendungsfälle
- Nur-Text-Vorschauen: einen tagfreien Auszug eines Artikels für Suchergebnisse oder Listenansichten erstellen.
- Nur-Text-E-Mail-Texte: HTML entfernen, bevor die Textalternative einer E-Mail versendet wird.
- Bereinigung von Benutzereingaben, die niemals Markup enthalten sollten, wie ein Anzeigename oder eine Suchanfrage.
Verwandte Funktionen
htmlspecialchars()—<,>,&und Anführungszeichen escapen, damit Markup als Text dargestellt wird, anstatt entfernt zu werden.htmlentities()— alle anwendbaren Zeichen in HTML-Entitäten umwandeln.trim()— umgebende Leerzeichen entfernen, oft in Kombination mitstrip_tags()verwendet, um das Ergebnis zu bereinigen.
Fazit
Die Funktion strip_tags() ist ein unkompliziertes Werkzeug zum Extrahieren von reinem Text aus Strings, die HTML- oder PHP-Markup enthalten. Übergeben Sie eine Erlaubnisliste (als String oder in PHP 7.4+ als Array), wenn Sie bestimmte Tags behalten möchten, und denken Sie daran, dass sie nur Tags entfernt — sie bereinigt keine Attribute, daher ist sie kein Ersatz für ordnungsgemäßes Ausgabe-Escaping. Verwenden Sie sie zur Erzeugung von reinem Text, und greifen Sie auf htmlspecialchars() oder einen echten Sanitizer zurück, wenn Sie sicheres HTML benötigen.