11 Stimme

PHP: strip_tags soll mit Leerzeichen ersetzen

Frage von Compi | 11.08.2016 um 10:02

Ich benutze die PHP-Funktion strip_tags() um alle HTML-Tags aus einem String zu entfernen.

Das funktioniert eigentlich super, jedoch gibt es ein kleines Problem bei Strings wie diesem:

<p>Erster Satz.</p><p>Zweiter Satz.</p>
<table>
<tr><td>Zelle Eins</td><td>Zelle Zwei</td></tr>
</table>

Die Funktion entfernt nämlich einfach alle Tags, wodurch dann folgendes Ergebnis entsteht:

Erster Satz.Zweiter Satz.
Zelle EinsZelle Zwei

Das sieht natürlich unschön aus, da bei jedem neuen Abschnitt oder auch nach jeder neuen DIV-Box hinter den Satzzeichen kein Abstand mehr verbleibt. Schlimmer ist es sogar noch bei einer Tabelle: Hier kleben nach der Entfernung der Tags alle Zellen ohne jeglichen Abstand aneinander.

Lieber hätte ich, dass statt der simplen Löschung der Tags ein Leerzeichen statt dem Tag eingefügt wird. Ich möchte also für das obige Beispiel folgendes Ergebnis haben:

Erster Satz. Zweiter Satz.
Zelle Eins Zelle Zwei

Ist es irgendwie möglich, strip_tags so zu steuern, dass alle Tags einfach durch ein Leerzeichen ersetzt werden? Bei der HTML-Ausgabe wäre es ja auch gar nicht so schlimm, wenn mehrere Leerzeichen hintereinander in dem String vorkämen, da diese sowieso ignoriert werden.

AntwortenPositivNegativDatumStimmen
2Beste Antwort2 Stimmen

Die Funktion strip_tags() kennt leider kein Parameter, wodurch man die Ersetzung steuern könnte.

Jedoch kannst du den String einfach vor dem Aufrufen von strip_tags() vorbereiten. Das könnte dann so aussehen:

$s = '<p>ABC</p><p>DEF</p>';
$s = str_replace('><', '> <', $s);

echo strip_tags($s);  // ABC DEF

Hier ersetzen wir vor dem Aufruf von strip_tags() jedes Vorkommnis von "><" durch "> <". Das sollte unabhängig vom jeweiligen Tag funktionieren und ersetzt ein "</p><p>" genauso wie ein "</td><td>" durch "</p> <p>" beziehungsweise "</td><td>".

Das Ergebnis von strip_tags() erhält dann entsprechend Leerzeichen an den entscheidenden Stellen.
11.08.2016 um 15:34

AntwortenPositiv Negativ
22 Stimmen

Statt die Funktion strip_tags() zu benutzen, kann man natürlich auch seinen eigenen regulären Ausdruck schreiben und verwenden. Zum Beispiel:

$s = '<p>ABC</p><p>DEF</p>';
$s = preg_replace('#<[^>]+>#', ' ', $s); // " ABC  DEF "
$s = preg_replace('#\s+#', ' ', $s);     // " ABC DEF "

echo trim($s);                           // "ABC DEF"

Die zweite Zeile ersetzt jeden Tag durch ein Leerzeichen, weswegen wir dann auch anschließend zwei Leerzeichen zwischen "ABC" und "DEF" haben.

Möchten wir dies vermeiden, können wir die dritte Zeile verwenden, um alle doppelten Leerzeichen zu entfernen. Mit trim() können wir zusätzlich die Leerzeichen vorne und hinten noch vor der Ausgabe abschneiden.
11.08.2016 um 16:05

AntwortenPositiv Negativ
Antworten

Ähnliche Themen

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.