String durchsuchen und Zeilenumbruch

Bencher

Mitglied
Ich habe einen String den ich mir aus der Datenbank hole.
z.B. "Das ist ja super lllllllllloooooooooollllllllll <IMG SRC=shoutbox/gif/smile01.gif>"

das <IMG SRC=shoutbox/gif/smile01.gif> wird dann durch ein bild ersetzt

Nun wird der String in einer Tabelle ausgegeben die nicht sehr breit ist. Normalerweise macht er einen Zeilenumbruch, aber wenn ein Wort drin vorkommt was länger als 24 Zeichen ist wird meine Tabelle breiter und das möchte ich verhindern.
Wenn ich aber mit wordwrap mir den String nach 24 Zeichen umbrechen lasse, bricht er auch das um <IMG SRC=shoutbox/gif/smile01.gif> und das bild wird dadurch nicht mehr angezeigt.

Kann mir einer sagen wie ich einen Zeilenumbruch bei zu langen Wörten hinbekomme.

Ich hoffe ihr habt mein Problem verstnaden.
 
Beispiel:
PHP:
<?php 
     //Nicht sehr elegant, dient auch mehr dazu Dir die Möglichkeiten zu zeigen...
     $string = 'Das ist ja super lllllllllloooooooooollllllllll <IMG SRC=shoutbox/gif/smile01.gif>';
     $neu = explode('<',$string);
     echo wordwrap($neu[0],24, "<br />\n");
     echo '<'.$neu[1];     
 ?>
 
Das sieht gut aus aber jetzt kann der String ja so aussehen

Bsp 1: "Das ist ja super <IMG SRC=shoutbox/gif/smile01.gif> lllllllllloooooooooollllllllll"

Bsp 2: "Das ist ja super <IMG SRC=shoutbox/gif/smile01.gif> lllllllllloooooooooollllllllll <IMG SRC=shoutbox/gif/smile01.gif>"

Bsp 3: "Das ist ja super lllllllllloooooooooollllllllll <IMG SRC=shoutbox/gif/smile01.gif>"

Wie kann man das dann machen, da ich nicht weiß wie oft so ein langes Wort im String vorkommt 1x oder mehrmals und genauso weiß ich nicht ob das Bild 1x oder mehrmals vorkommt.
 
Versuchs mal so:
Code:
preg_replace('@([^\s\<\>\/]{24}|\/{24})@',"\\1 ",$str)
sollte hinhauen, solange im Pfad zum Bild keine Strings mit 24 Zeichen vorkommen(Slash ausgenommen)
 
Für die o.g. Variationen wäre das hier auch noch eine Möglichkeit.

PHP:
<?php 
     
 $string = 'Das ist ja super <IMG SRC=shoutbox/gif/smile01.gif> lllllllllloooooooooollllllllll <IMG SRC=shoutbox/gif/smile01.gif>';

    preg_match_all('/([\w\s]+)|(<([\w])+[^>]*>)/i',$string,$matches);

    echo wordwrap($matches[0][0],24, "<br />\n").'<br>';
    echo $matches[0][1];
    echo '<br>';
    echo wordwrap($matches[0][2],24, "<br />\n").'<br>';
    echo $matches[0][3];

 ?>
 
Danke für die Antworten
Habe das jetzt eingebaut
PHP:
preg_replace('@([^\s\<\>\/]{24}|\/{24})@',"\\1 ",$str)

und bis jetzt funktioniert es hab mal alle möglichkeiten getestet.

Könnte mir jetzt auch einer mal bitte Erklären was das macht, habe mir den Befehl preg_replace zwar angeschaut komme damit aber nicht so richtig klar.
 
Kann mir das nun einer erklären was das jetzt genau macht

PHP:
preg_replace('@([^\s\<\>\/]{24}|\/{24})@',"\\1 ",$str)
 
Also das ersetzt was :-)

es gibt 2 Sachen, die ersetzt werden:
zum Einen: [^\s\<\>\/]{24}
das sind 24 aufeinanderfolgende Zeichen, die kein Leerzeichen, spitze Klammer oder Slash sind.
\s ist der Ausdruck für Whitespaces, der Rest ist ja ersichtlich, das Hütchen am Anfang negiert die Zeichen...es wird also alles gefunden, was nicht übereinstimmt.
...
zum Anderen:
\/{24}
Da ich annehme, das du die spitzen Klammern ohnehin ersetzt, wird noch nach 24 aufeinanderfolgenden Slashes gesucht... die könnte ein Bösewicht auch benutzen, da sie lt. erstem Ausdruck erlaubt wären(wobei...wenn ich es jetzt so sehe, könnte man das ganze mit abwechselnd Buchstabe/Slash umgehen...aber irgendwas ist ja immer :-))

Was gefunden wird, wird dann halt ersetzt... mit sich selbst zzgl.einem Leerzeichen "\\1 "

\\1 ist dabei ein Verweis auf das gefundene Suchmuster innerhalb der runden Klammern(die Klammern erzeugen eine Referenz)
 
Zurück