Aenogym: \n durch <br> ersetzen

hi,

ich möchte sämtliche absätze in einem string durch <br>-tags ersetzen lassen.

mit $text = str_replace("\n", "<br>", $text); funktionierts irgendwie nicht...

kann mir jemand sgaen, wie das geht?
danke,
Aenogym

  1. hi,

    ich möchte sämtliche absätze in einem string durch <br>-tags ersetzen lassen.

    hast du dir bereits die funktion nl2br() angeschaut?

    gruß,
    wahsaga

    --
    I'll try being nicer if you'll try being smarter.
    1. hi,

      ich möchte sämtliche absätze in einem string durch <br>-tags ersetzen lassen.

      hast du dir bereits die funktion nl2br() angeschaut?

      gruß,
      wahsaga

      dankeschön. bin ich dumm, hab das schon hundertmal benutzt aber hatte wohl grade nen blackout.
      die andere antwort von christian kruse scheint aber sicherer zu sein. daher werd ich die mal ausprobieren.

      danke euch beiden,
      Aenogym

  2. Hallo Aenogym,

    ich möchte sämtliche absätze in einem string durch <br>-tags
    ersetzen lassen.

    mit $text = str_replace("\n", "<br>", $text); funktionierts
    irgendwie nicht...

    kann mir jemand sgaen, wie das geht?

    Dazu hatte ich mal was in den User-Comments geschrieben:

    http://de.php.net/manual/en/function.nl2br.php

    Dummerweise sind die nicht verfuegbar, gerade. Naja, ich hatte
    geschrieben, dass aufgrund der Plattform-Unterschiede nl2br()
    unbrauchbar sei. Man sollte

    $txt = preg_replace('!\015\012|\012|\015!','<br>',$txt);

    benutzen.

    Grüße,
     CK

    --
    Der Mund ist das Portal zum Unglück.
    http://wwwtech.de/
    1. Naja, ich hatte
      geschrieben, dass aufgrund der Plattform-Unterschiede nl2br()
      unbrauchbar sei.

      Könntest Du das vielleicht nochmal hier erklären? Ich benutze nl2br() des öfteren und ich habe bisher noch nicht gemerkt, daß es da irgendwie zu Problemen kam. Auf der Arbeit benutze ich OS X, zu Hause GNU/Linux und Windows.
      Ich konnte hier nie irgendwelche Probleme beobachten. So spontan könnte ich mir auch nur vorstellen, daß MacOS 9 Probleme bereiten könnte, aber eigentlich bin ich der Meinung, daß mir das dann eigentlich irgendwann schon mal aufgefallen sein sollte...

      Wäre nett, wenn Du da noch mal kurz was zu schreiben könntest.

      Gruß, rob

      1. Hi rob!

        Naja, ich hatte
        geschrieben, dass aufgrund der Plattform-Unterschiede nl2br()
        unbrauchbar sei.
        Könntest Du das vielleicht nochmal hier erklären?

        Was Christian wahrschenlich meint ist das auf den verschiedenen Betriebssystemen Zeilenumbrüche anders gespeichert werden, z.B. erzeugt man in Windows erst durch \n\r einen Zeilenumbruch, in Linux hingegen schon mit \n. Was die Macs betrifft weiß ich nicht.

        Grüße,
        Fabian St.

        --
        Endlich online: http://fabis-site.net
        --> XHTML, CSS, PHP-Formmailer, Linux
        Selfcode: ie:% fl:|  br:^ va:) ls:& fo:) rl:( n4:° ss:| de:> js:| ch:| mo:) zu:)
        1. Was Christian wahrschenlich meint ist das auf den verschiedenen Betriebssystemen Zeilenumbrüche anders gespeichert werden

          Jep, das ist mir schon klar.

          z.B. erzeugt man in Windows erst durch \n\r einen Zeilenumbruch, in Linux hingegen schon mit \n.

          Bei Windows ist es \r\n nicht \n\r.

          Was die Macs betrifft weiß ich nicht.

          Ja, jetzt ist das so eine Sache. Da Mac OS X einen BSD-Unterbau hat, werden die Umbrüche im Unix-Stil mit \n codiert. Auf früheren Systemen wurde aber ein \r eingesetzt. Das machen einige Mac-Programme auch jetzt noch auf OS X. Ist also hier ein wenig durcheinander.

          Naja, jedenfalls konnte ich bisher auf keinem System bemerken, daß nl2br() Schwierigkeiten bereitete, darum wollte ich wissen, ob mir da jemand was genaueres sagen kann...
          Ich meine auch, daß ich selbst auf OS 9 damit keine Probleme hatte (obwohl PHP dafür in anderen Fällen an und zu schonmal \r nicht als Umbruch akzeptieren wollte...)

          Gruß, rob

    2. Moin!

      Dazu hatte ich mal was in den User-Comments geschrieben:

      http://de.php.net/manual/en/function.nl2br.php

      Dummerweise sind die nicht verfuegbar, gerade. Naja, ich hatte
      geschrieben, dass aufgrund der Plattform-Unterschiede nl2br()
      unbrauchbar sei.

      Stimmt aber nicht. nl2br() funktioniert zumindest bei meiner PHP-Version bestens mit allen möglichen Zeilenschaltungen aller Systeme.

      Man sollte
        $txt = preg_replace('!\015\012|\012|\015!','<br>',$txt);
      benutzen.

      Sollte man nicht. nl2br() funktioniert.

      - Sven Rautenberg

      1. Hi,

        Stimmt aber nicht. nl2br() funktioniert zumindest bei meiner PHP-Version bestens mit allen möglichen Zeilenschaltungen aller Systeme.

        Zitat aus der Doku:
        Returns string with '<br />' inserted before all newlines.

        Das heißt, daß die Funktion nicht brauchbar ist, wenn man ein korrektes HTML-Dokument ausgeben will - nur mit einem XHTML-Dokument ist es korrekt.

        Man sollte
          $txt = preg_replace('!\015\012|\012|\015!','<br>',$txt);
        benutzen.

        Wobei ggf. (für XHTML-Dokumente) noch der / ins <br> muß.

        nl2br() funktioniert.

        Unter Umständen. s.o.

        cu,
        Andreas

        --
        MudGuard? Siehe http://www.Mud-Guard.de/
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. hi,

          Zitat aus der Doku:
          Returns string with '<br />' inserted before all newlines.

          Das heißt, daß die Funktion nicht brauchbar ist, wenn man ein korrektes HTML-Dokument ausgeben will - nur mit einem XHTML-Dokument ist es korrekt.

          warum die da nicht mal einen zusätzlichen, optionalen parameter eingebaut haben, mit dem man von <br> auf <br /> "umschalten" kann, ist mir nach wie vor ein rätsel.

          gruß,
          wahsaga

          --
          I'll try being nicer if you'll try being smarter.
          1. Moin!

            warum die da nicht mal einen zusätzlichen, optionalen parameter eingebaut haben, mit dem man von <br> auf <br /> "umschalten" kann, ist mir nach wie vor ein rätsel.

            Mir nicht. nl2br ist aus der Zeit, als es in PHP (3?) Mode war, für alltägliche dumme Probleme erschlagende und einfach anwendbare Funktionen zu schreiben. PHP, wie wir es heute kennen, ist ja schließlich aus einer Template-Engine hervorgegangen. Und in einer Template-Engine braucht man unter Umständen eben mal die Wandlung, wie sie nl2br($string) liefert.

            Sicher: Mit einem optionalen zweiten Parameter hätte man kompatibel bleiben können. Dieser Parameter sollte dann aber lieber den einzufügenden String enthalten, so dass man

            nl2br($string)          -> fügt <br> ein
            nl2br($string, "<br>")  -> fügt <br> ein
            nl2br($string, "<br/>") -> fügt <br/> ein

            machen könnte.

            Hat man aber nicht, muß man so mit leben. Wer seine Textausgabe ernst meint, der wird sowieso kein nl2br() verwenden, sondern vernünftige <p>-Absätze generieren. :)

            - Sven Rautenberg

            1. Hi Sven,

              Hat man aber nicht, muß man so mit leben. Wer seine Textausgabe ernst meint, der wird sowieso kein nl2br() verwenden, sondern vernünftige <p>-Absätze generieren. :)

              Naja, aber innerhalb eines Absatzes kann und darf dennoch durchaus ein weicher Umbruch erfolgen. ;-)

              Kurt

              --
              Nein, ich beantworte keine Anfragen per e-mail.
              ss:( zu:) ls:[ fo:) de:] va:| ch:| sh:( n4:° rl:( br:? js:| ie:% fl:( mo:?
              "Wer der Meinung ist, dass er fuer Geld alles haben kann, geraet leicht in den Verdacht, dass er fuer Geld alles zu tun bereit ist."  (Benjamin Franklin; am. Politiker; 1706-1790)
              http://elektro-dunzinger.at
              http://shop.elektro-dunzinger.at
          2. Hallo wahsaga,

            warum die da nicht mal einen zusätzlichen, optionalen parameter
            eingebaut haben, mit dem man von <br> auf <br /> "umschalten"
            kann, ist mir nach wie vor ein rätsel.

            Ich habe das jetzt mal vorgeschlagen und gleich einen Patch
            mitgeschickt. Mal sehen, ob sie es einbauen.

            Grüße,
             CK

            --
            If God had a beard, he'd be a UNIX programmer.
            http://wwwtech.de/
            1. Hi!

              warum die da nicht mal einen zusätzlichen, optionalen parameter
              eingebaut haben, mit dem man von <br> auf <br /> "umschalten"
              kann, ist mir nach wie vor ein rätsel.

              Ich habe das jetzt mal vorgeschlagen und gleich einen Patch
              mitgeschickt. Mal sehen, ob sie es einbauen.

              Dasselbe passiert noch an anderesn Stellen, im Moment fällt mir noch das generierte <input> Feld mit der Session-ID bei use-trans-sid ein.

              Vielleicht sollte man sowas(HTML/XHTML) per globaler Konfigurations-Option einstellbar machen?

              Grüße
              Andreas

              --
              SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
      2. Hallo Sven,

        Dazu hatte ich mal was in den User-Comments geschrieben:

        http://de.php.net/manual/en/function.nl2br.php

        Dummerweise sind die nicht verfuegbar, gerade. Naja, ich hatte
        geschrieben, dass aufgrund der Plattform-Unterschiede nl2br()
        unbrauchbar sei.

        Stimmt aber nicht. nl2br() funktioniert zumindest bei meiner PHP-
        Version bestens mit allen möglichen Zeilenschaltungen aller
        Systeme.

        Oh, fein. Dann haben sie den Bug endlich gefixed. Ja, jetzt seh
        ichs:

        while (str < end) {
                if (*str == '\r') {
                    if (*(str+1) == '\n') {
                        str++;
                    }
                    repl_cnt++;
                } else if (*str == '\n') {
                    if (*(str+1) == '\r') {
                        str++;
                    }
                    repl_cnt++;
                }

        str++;
            }

        Dann kann ich jetzt ja guten Gewissens umsteigen auf nl2br() ;-)

        Grüße,
         CK

        --
        Ihr wisst nicht, wie man den Menschen dient. Wie sollt ihr wissen, wie man den Goettern dienen soll?
        http://wwwtech.de/