Manuel W.: zeilenumbrüche ersetzen

Hallo Community!

Ein wahrscheinlich ganz einfaches Problem, für das ich jedoch selbst noch keine Lösung gefunden habe..

Ich will sämtliche in einem String vorkommende Zeilenumbrüche gegen die Zeichenkette "<br />\n         " ersetzen. Problem hierbei ist, dass es insgesamt drei verschiedene Arten gibt einen Zeilenumbruch zu "beschreiben".. CR, LF, und CRLF (afaik).

"Normales" ersetzen mittels str_replace() funktioniert nicht.

Irgendwelche Vorschläge?

P.S.: Noch besser wäre es, wenn die Zeilenumbrüche gegen "<br />???         " ausgetauscht werden würden, wobei "???" bei WIN CRLF, bei UNIX LF, und bei MacOS CR sei.

  1. Hallo,

    Folgenden Schnipsel habe ich mir irgendwann mal bei CK abgeguckt:

    $text = preg_replace('/(\015\012)|(\015)|(\012)/','<br />', $text);

    Dieter

    1. Eure Vorschläge funktionieren leider beide nicht.

      Angenommen ich verwende einen Algorithmus wie

      $ausgabe = preg_replace("~\r|\n|\r\n|\n\r~", "<br />\nBLA", "EINS\rZWEI");

      , dann würde im ersten Durchgang das \r gegen <br />\nBLA ausgetauscht werden. Im darauffolgenden zweiten Durchgang würde das \n ausgetauscht werden, weshalb $ausgabe dann schon <br /><br />\nBLABLA wäre etc.

      So hat es auf mich zumindest den Anschein.. Wenn ich mir die Ausgabe so ansehe.

      1. Moin!

        Mann oh Mann...

        Du ersetzt:

        "\n\r" -> "\n"
        "\r"   -> "\n"
        "\n"   -> "<br />\n"

        MFFG (Mit freundlich- friedfertigem Grinsen)

        fastix®

        --
        Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Development. Auch  für seriöse Agenturen.
        1. Hello,

          "\n\r" -> "\n"

          das ist ein ungewöhnlicher Code...

          \r\n   wäre der übliche.

          Außerdem muss man vorher nicht ersetzen, wenn man gemischte Angaben aus drei Systemen hat. Wie ich schon sagte, sit die Funktion nl2br() schlau genug, \r\n \r oder \n jeweils durch  _ein_  <br />  _vor_  der gefundenen Sequenz zu ergänzen.

          Kleiner Test:

          <?php  ### newline.php ###

          $text = "Mein Text\nder Zeilenumbrüche\r\nenthält und nun\r mit breaks ergänzt werden soll";

          echo "<pre>";
          echo $text;
          echo "</pre>";

          $text = nl2br($text);

          echo "<pre>";
          echo $text;
          echo "</pre><br />";

          for ($i=0; $i < strlen($text);$i++)
          {
            $dec = ord($text{$i});
            echo "<b>".htmlentities($text{$i})."</b>".dechex($dec)." ";

          }

          ?>

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. Hello,

    nl2br() sollte das bei eingeschaltetem autodetect für den Zeilenumbruch schon leisten. Musst Du eben mal einen Test machen...

    Und sonst muss man vorher eben noch ein

    $_search = array(chr(13).chr(10),chr(13),chr(10));
    $replace = chr(13).chr(10);

    $ausgabe = str_replace($_search,$replace,$eingabe)

    durchlaufen lassen.

    Liebe Grüße aus http://www.braunschweig.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen