Funktion strip_tags() - Tags entfernen aus strings

Es kann vorkommen, dass man in einem PHP-Programm Zeichenketten verarbeiten muss, das HTML-, XML- oder PHP-Tags enthält bzw. enthalten kann. Die Tags können z.B. durch das Kopieren von Texten aus einem Textverarbeitungsprogramm entstehen, die in ein Formularfeld eingefügt und abgeschickt wurden. Häufig sind diese unerwünscht und müssen durch PHP entfernt werden. Hierfür kann man die Funktion strip_tags() verwenden. Der Rückgabewert der Funktion ist eine Zeichenkette ohne HTML-, XML- oder PHP-Tags. Innerhalb der runden Klammern werden die Parameter wie folgt angegeben.

  1. Die Zeichenkette, die verarbeitet werden soll (string).
  2. Die Tags, die nicht entfernt und somit erlaubt werden sollen (allowable, optional).

HTML-Kommentare werden immer entfernt, sodass eine Angabe als erlaubter Tag keine Wirkung hat. Beim folgenden Beispiel enthält die Zeichenkette den STRONG-Tag, mit strip_tags() wird der Tag entfernt und die Zeichenkette wird ausgegeben.

<?php

$str = '<strong>Wichtiger Text</strong>';

// Ausgabe: Wichtiger Text
echo strip_tags($str);

?>

PHP prüft die Tags nicht auf ihre Gültigkeit, sodass die Bestandteile der Zeichenkette als Tags betrachtet werden, die mit einer spitzen Klammer <...> umschlossen sind. Beim folgenden Beispiel wird der Tag <abcdefg> entfernt, obwohl es sich hierbei nicht um einen gültigen HTML-Code handelt.

<?php

$str = '<abcdefg>Text mit ungültigem HTML-Tag</abcdefg>';

// Ausgabe: Text mit ungültigem HTML-Tag
echo strip_tags($str);

?>

Falls bestimmte Tags erlaubt werden sollen, kann man diese als zweiten Parameter innerhalb von einfachen Hochkommas (ohne den schließenden Tag) angeben. Beim folgenden Beispiel wird der Tag <b>...</b> nicht entfernt.

<?php

$str = '<strong><b>Wichtiger Text</b></strong>';

// Ausgabe: <b>Wichtiger Text</b>
echo strip_tags($str, '<b>');

?>

Vor PHP 5.3.4 wurden selbst schließende XHTML-Tags (z.B. <br />) unterschiedlich zu normalen HTML-Tags (z.B. <br>) behandelt, wenn man sie von der Entfernung ausschließen wollte. Beim folgenden Beispiel enthält die Zeichenkette beide Tags. Die Ausgabe erfolgt je nach PHP-Version unterschiedlich. Vor PHP 5.3.4 wird <br /> entfernt, da der Tag nicht explizit unter allowable angegeben wurde. Ab PHP 5.3.4 ist das nicht mehr notwendig, da <br> und <br /> gleich behandelt werden.

<?php

$str = 'Text<br>mit<br />Zeilenumbrüchen';

// Ausgabe vor PHP 5.3.4: Text<br>mitZeilenumbrüchen
echo strip_tags($str, '<br>');

// Ausgabe ab PHP 5.3.4: Text<br>mit<br />Zeilenumbrüchen
echo strip_tags($str, '<br>');

?>

Beim Entfernen von HTML-Tags kann es zu unerwünschten Ergebnissen kommen, z.B. wenn Zeilenumbrüche entfernt und dadurch zwei Wörter, die normalerweise getrennt sind, zusammen ausgegeben werden.

<?php

$str = 'Text<br>mit<br>Zeilenumbrüchen';

// Ausgabe: TextmitZeilenumbrüchen
echo strip_tags($str);

?>

Um bei Zeilenumbrüchen das Zusammensetzen von getrennten Wörtern zu unterbinden, kann man eine eigene Funktion schreiben. Beim folgenden Beispiel wird die selbst geschriebene Funktion rip_tags() benannt. Zeichenketten innerhalb der spitzen Klammern werden als Tags behandelt und entfernt. Danach werden Zeilenumbrüche, Tabulatoren und mehrere zusammenhängende Leerzeichen mit einem Leerzeichen ersetzt und die modifizierte Zeichenkette wird zurückgegeben.

<?php

// Funktionsname und Parameter festlegen
function rip_tags($str) { 
    
  // HTML-Tags entfernen
  $str = preg_replace ('/<[^>]*>/', ' ', $str); 
    
  // Steuerzeichen entfernen
  $str = str_replace("\r", '', $str);    // Ersetzen ohne Leerzeichen
  $str = str_replace("\n", ' ', $str);   // Ersetzen mit Leerzeichen
  $str = str_replace("\t", ' ', $str);   // Ersetzen mit Leerzeichen
    
  // Mehrere Leerzeichen entfernen
  $string = trim(preg_replace('/ {2,}/', ' ', $str));
    
  return $str; 

}

$str = 'Text<br>mit<br>Zeilenumbrüchen';

// Ausgabe: Text mit Zeilenumbrüchen
echo rip_tags($str);

?>

Falls man als zweiten Parameter einen Tag angibt, spielt die Groß- und Kleinschreibung keine Rolle.