preg_replace() Problem...

GFX

New member
10 Juli 2006
1
0
Hallöchen :D

Immer wieder das alte Lied....
Zu lange Zeichenketten zerstören das Layout :yawn:

In meinem Fall hilft leider WORDWRAP() auch nicht weiter.
Intreressanter wäre es die Funktion preg_replace() zu nutzen.

Ich bin praktisch PHP-Anfänger und habe ein kleines Forumscript geschrieben, in dem ich das oben genannte Problen vor vornherein ausschliessen will.

Die Textbreite im Forum liegt bei max. 100 Zeichen
mit $neutext = wordwrap( $text, 60, " \n", 1);
würde ich die maximale Zeichenanzahl auf 60 setzen und einen Zeilenumbruch erzwingen.

Was aber, wenn ein User eine Zeichenkette mit m,s eingibt z.B.: mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm...
Dann müsste ich die Zeichen auf 40 beschränken, wass dann allerdings nicht mehr gut aussieht...

Meine Frage nun:
gibt es eine Möglichkeit mit preg_replace() eine Möglichkeite z.B.: 5 aufeinanderfolgende GLEICHE Zeichen durch ein anderes Zeichen ( z.B. ein Freizeichen ) zu ersetzen?
Dabei müsste es egal sein um welches Zeichen es sich handelt - es sollte nur abgefragt werden ob mehr als 5 gleiche Zeichen in einer Zeichenkette vorhanden sind!

Oder gibt es dafür eine Funktion???

Über eine Antwort wäre ich äusserst begeistert! :D :D :D :D
 
du kannst mit backreferenzen prüfen ob ein zeichen x-mal vorkommt. allerdings macht das alles nur sehr aufwändig und kostet damit ne menge zeit (auch wenn die vielleicht unter einer sekunde liegt...). m und w sind natürlich immer die zwei schlimmsten fälle, da es aber kaum worte gibt die länger als 40 zeichen sind, kannst du dein limit auch auf 40 legen.

fügst du statt leerzeichen oder zeilenumbruch ein <wbr> ein, ist der umruch nur im notfall sichtbar. das wort "abc<wbr>def" würde also nur umgebrochen werden, wenn es als einzelnes wort nicht in einer zeile stehen kann.
 
PHP:
$text = 'Hallo Welt mmmmmmmmmm Test';
$text = preg_replace('#(.)\\1{4,}#', '\\1\\1\\1\\1\\1', $text);
echo $text;
Ausgabe:
Hallo Welt mmmmm Test

Gruß,
Xgame
 
Zuletzt bearbeitet: