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.
Ähnliche Themen
Mehrere Texte gleichzeitig ersetzen
Tutorial | 0 Kommentare
PHP: Alle HTML-Tags aus String entfernen
Tutorial | 0 Kommentare
HTML: Kein Zeilenumbruch zwischen bestimmten Worten
Tipp | 0 Kommentare
PHP: Beliebige Zeichen am Anfang und Ende eines Strings entfernen
Tutorial | 0 Kommentare
Was ist ein geschütztes Leerzeichen?
Info | 0 Kommentare
Text nur in bestimmten Zeilen ersetzen
Tutorial | 0 Kommentare
Word: Geschütztes Leerzeichen schreiben
Tutorial | 0 Kommentare
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.
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:
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
Statt die Funktion strip_tags() zu benutzen, kann man natürlich auch seinen eigenen regulären Ausdruck schreiben und verwenden. Zum Beispiel:
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