PHP: Wie aufeinanderfolgende Umbrüche zu einem zusammenfassen?

  • #1
S

starlitmind

Bekanntes Mitglied
Themenersteller
Dabei seit
10.10.2001
Beiträge
62
Reaktionspunkte
0
Hallo,

ich mal wieder mit einer dummen Anfängerfrage zu PHP:

Mit
Code:
$variable = str_replace(\n,<br />,$variable);
lässt sich wunderbar jeder Zeilenumbruch durch den entsprechenden HTML-Tag ersetzen. Wie erreiche ich jedoch, dass beliebig viele aufeinanderfolgende Zeilenumbrüche zunächst zu einem einzigen zusammengefasst werden?

Vielen Dank im Voraus,
Std.
 
  • #2
Hi

$variable = preg_replace(/(\n)*/s,<br />,$variable);
Regular Expressions sind allerdings eine Wissenschaft für sich 8)

Gruß, Michael
 
  • #3
Danke...

aber als ich es gerade ausprobiert habe, hatte ich nach jedem Buchstaben (!) ein <br /> stehen! Was ist also falsch?

Und um zu verstehen, wie das funktioniert - könntest du mir vielleicht auch noch erklären was /(\n)*/s im einzelnen bedeutet?

Und was meinst du mit
Regular Expressions sind allerdings eine Wissenschaft für sich
?

Jetzt ist mir aber noch ein Problem eingefallen: Wie stelle ich es an, dass ein einzelnes \n durch <br />, und ab zwei aufeinanderfolgenden \n diese durch </p><p>, ersetzt werden?

Ich mach's aber auch komplizert... ;)

Gruß,
Std.
 
  • #4
Hi

Ups, dann hab ich einen Fehler gemacht.
Das /(\n)*/s ist eine Regular Expression :)
Eine Erklärung gibts hier:


korrekt müsste es dann glaube heißen:
$variable = preg_replace(/(\n)+/,&lt;br />,$variable);

Kurz erklärt:
das / ist ein Delimiter, der muss am Anfang und am Ende stehen, welchen man da nimmt ist egal, er darf in der Mitte halt nicht mehr vorkommen.
mit (\n)+ sagt man, dass der Inhalt in der Klammer mindestens einmal vorkommen muss und dann alle aufeinanderfolgenden durch ein &lt;br /> ersetzt werden.
Das s nach dem / ist ein Modifier, womit man zusätzliche Optionen hat.

Ich seh aber gerade das brauchen wir hier gar nicht.

Zu deiner zweiten Frage:
$variable = preg_replace(/(\n){2,}/,&lt;/p>&lt;p>,$variable);
$variable = str_replace(\n,&lt;br />,$variable);
Dabei ist die Reihenfolge wichtig.

Gruß, Michael
 
  • #5
Zu deiner zweiten Frage:
$variable = preg_replace(/(\n){2,}/,</p><p>,$variable);
$variable = str_replace(\n,<br />,$variable);
Dabei ist die Reihenfolge wichtig.

Vielen Dank, aber leider bleibt preg_replace ohne Auswirkungen. str_replace wandelt dann wie gehabt jeden /n in <br />.

Werde mir gleich mal die Erklärungen zu Regular Expressions und den Pattern Modifiers reinziehen, danke für die Links. (Gibt's sowas auch auf deutsch?)

Gruß,
Std.
 
  • #6
Moin,

es klappt jetzt!

Das hier () (ist auf deutch ;D) hat mir weitergeholfen.

Das Problem hat sich bei mir daraus ergeben, dass ich preg_replace auf einen String anwenden wollte, der aus einem HTML-Formular stammt. Die eigentliche Ursache war letztendlich, das Windows nicht einfach \n als Zeilenumbruch benutzt, sondern \r\n, sodass preg_replace auch keine aufeinanderfolgenden \n finden konnte, str_replace aber sehr wohl einzelne \n gefunden hat.

So funktioniert es jetzt:
Code:
$message = preg_replace(/(\r\n)|(\r)/,\n,$message);
$message = preg_replace(/(\n){2,}/,</p><p>,$message);
$message = str_replace(\n,<br />,$message);

Jetzt bin ich aber froh, dass ich Windows benutze und kein Unix, sonst hätte bei mir alles wunderbar funktioniert, und wenn ein Windows-User etwas ins Formular eingegeben hätte, wieder nicht... ;)

Obige Lösung hilft durch das oder (\r) auch gegen Macs, die wiederum nur \r als Zeilenumbruch verwenden. :p

Das kommt mal wieder davon, dass jeder meint, sein eigenes Süppchen zu kochen. Als wenn man sonst nichts zu tun hätte! :mad:

Ich danke PCDReitz für seine Hilfe und ich denke, wenn's zu meiner hiermit kundgegebenen Erleuchtung keine wichtigen Hinweise oder Ergänzungen mehr hinzuzufügen gibt, ist mir geholfen und das Thema damit erledigt.

Gruß,
Std.
 
Thema:

PHP: Wie aufeinanderfolgende Umbrüche zu einem zusammenfassen?

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben