PHP: Wie aufeinanderfolgende Umbrüche zu einem zusammenfassen?

Dieses Thema PHP: Wie aufeinanderfolgende Umbrüche zu einem zusammenfassen? im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von starlitmind, 22. Apr. 2003.

Thema: PHP: Wie aufeinanderfolgende Umbrüche zu einem zusammenfassen? Hallo, ich mal wieder mit einer dummen Anfängerfrage zu PHP: Mit $variable = str_replace(\n,<br />,$variable);...

  1. 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
    ?

    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:
    http://www.php.net/manual/en/ref.pcre.php

    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.
    http://www.php.net/manual/en/pcre.pattern.modifiers.php
    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. 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 (http://www.php-resource.de/tutorials/read/10/1/) (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.
     
Die Seite wird geladen...

PHP: Wie aufeinanderfolgende Umbrüche zu einem zusammenfassen? - Ähnliche Themen

Forum Datum
Texteditor gesucht, der Zeilenumbrüche entfernen kann Software: Empfehlungen, Gesuche & Problemlösungen 12. Dez. 2007