MichaelR: linebreaks herausfiltern ... und ersetzen ...

Hi Leute,

in einer Variablen ($varText) sind Zeilenumbrüche in Form von <br /> enthalten; diese Var soll in einer textarea angezeigt werden.

  
print '<textarea ...>' . $varText . '</textarea>';  

nun dachte ich mir, dass es eigentlich möglich sein sollte, die <br /> durch sichtbare linebreaks #13#10 zu ersetzen:

$varText = str_replace('<br />', #13#10, $varText);

Allerdings bekomme ich da immer eine Fehlermeldung, scheinbar macht #13#10 hier Probleme.

Wisst ihr vielleicht eine andere Möglichkeit (oder einen Vorschlag für diese Möglichkeit ?) wie ich <br /> ersetzen kann ?

Danke
Grüße
Michael

  1. Hi!

    Nein dein Problem liegt beim <br /> du musst das / maskieren und zwar so: <br />, dann solte es gehen. Sonst sieht er das / als Anweisung an.

    $varText = str_replace('<br />', #13#10, $varText);

    1. Hi!

      Nein dein Problem liegt beim <br /> du musst das / maskieren und zwar so: <br />, dann solte es gehen. Sonst sieht er das / als Anweisung an.

      $varText = str_replace('<br />', #13#10, $varText);

      achso, dass #13#10 müsste auch noch in ''!

      1. Hi,

        Nein dein Problem liegt beim <br /> du musst das / maskieren und zwar so: <br />, dann solte es gehen. Sonst sieht er das / als Anweisung an.

        muss ich noch probieren ...

        $varText = str_replace('<br />', #13#10, $varText);

        aber:

        achso, dass #13#10 müsste auch noch in ''!

        wenn das in '' kommt, dann wird es buchstäblich so angezeigt.

        Grüße
        Michael

        1. Hallo,

          Nein dein Problem liegt beim <br /> du musst das /
          achso, dass #13#10 müsste auch noch in ''!

          wenn das in '' kommt, dann wird es buchstäblich so angezeigt.

          Das eigentliche Problem ist ja sicher schon gelöst. Aber #13#10 ist Pascal und PHP nutzt hier C-Systax. da würde ich bestfalls auf 0x13,0x10 tippen (geht aber nicht!) oder

          chr(13).chr(10)

          schreiben /das geht).

          Grüße

          Thomas

  2. hi

    in einer Variablen ($varText) sind Zeilenumbrüche in Form von <br /> enthalten; diese Var soll in einer textarea angezeigt werden.

    print '<textarea ...>' . $varText . '</textarea>';

      
    
    > nun dachte ich mir, dass es eigentlich möglich sein sollte, die <br /> durch sichtbare linebreaks #13#10 zu ersetzen:  
      
    
    > $varText = str\_replace('<br />', #13#10, $varText);  
      
    $varText = str\_replace('<br />','\n',$varText);  
      
    
    > Allerdings bekomme ich da immer eine Fehlermeldung, scheinbar macht #13#10 hier Probleme.  
      
    versuch \n  
      
    Fabian  
      
    ps: bevor wieder einer mit den systemunterschieden bezüglich dieses \_steuerzeichens\_ ankommt: es geht so.
    
    1. Hallo Fabian, Hallo Michael,

      $varText = str_replace('<br />','\n',$varText);

      Kannst Du Dir sicher sein, dass immer <br /> und nicht <br> oder <br clear="all" /> oder <br style="clear: both;"/> oder <br/> kommt?

      Wenn ja, dann nimm' Fabians lösung.

      Wenn nicht, dann wäre folgendes eine bessere Idee:

      $varText = preg_replace ('/<br[^>]*>/i', '\n', $varText);

      Das ersetzt alle Tags, die mit br anfangen.
      Wenn Du's etwas narrensicherer haben willst, dann vielleicht auch so:

      $varText = preg_replace ('/<br( [^>]*|/)>/i', '\n', $varText);

      (obiges würde auch <break> oder <brummm> oder so etwas ersetzen, unteres nicht)

      ps: bevor wieder einer mit den systemunterschieden bezüglich dieses _steuerzeichens_ ankommt: es geht so.

      ich glaub' Dir das jetzt mal und verwende das auch.

      Grüße,

      Christian

  3. Hi Leute,

    in einer Variablen ($varText) sind Zeilenumbrüche in Form von <br /> enthalten; diese Var soll in einer textarea angezeigt werden.

    print '<textarea ...>' . $varText . '</textarea>';

      
    Mal abgesehen davon, wie gut oder schlecht \_diese\_ obige Idee ist, die Frage: Woher kommt diese Textvariable genau? Kriegst du sie zufällig aus einer deiner Textareas, die ursprünglich mal leer waren? Dann solltest du anders vorgehen!  
      
    Eine leere Textarea ist kein Problem. :)  
      
    Wenn sie ausgefüllt wird, kriegst du als Resultat einen String mit vielen schönen Zeichen und ein paar Zeilenumbrüchen der Art "\n" drin.  
      
    Solch einen String kannst du auf zweierlei Art verwenden: Einmal kannst du ihn zurück in eine Textarea schreiben wollen, andererseits kannst du ihn auch als HTML-Inhalt ausgeben.  
      
    Wenn du den String in eine Textarea ausgibst, mußt zu zwingend die möglicherweise enthaltenen HTML-Tags maskieren! Sonst tipp dir jemand den String </textarea> ein, und du bist in Schwierigkeiten. Für diesen Fall kennt PHP die Funktion htmlspecialchars(), welche alle <, > und & in die ungefährlichen Zeichen <, > und & umwandelt (ich glaube, " wird auch in " gewandelt). Die Zeilenumbrüche müssen nicht behandelt werden, sondern dürfen original bleiben.  
      
    Wenn du die Eingabe allerdings außerhalb einer Textarea haben willst, dann kommt es darauf an, ob der Benutzer in die Textarea HTML eingeben darf oder nicht.  
      
    Darf er es, besteht eigentlich kein Grund, die Ausgabe mit nl2br() (welche bekanntermaßen die <br /> einfügt) zu umbrechen: Gib einfach den kompletten String aus, wie er ist. Der Benutzer hätte mit Sicherheit <br> eingefügt, wenn er sie gewollt hätte.  
      
    Wenn kein HTML erlaubt, ist, mußt du wiederrum die bösen HTML-Zeichen maskieren (ansonsten tippt dir noch einer ein böses Javascript ins Textfeld), und außerdem noch die Zeilenumbrüche wandeln. Maskieren steht oben - htmlspecialchars() - und die Zeilenumbrüche werden \_erst bei der endgültigen Ausgabe\_ mit nl2br() umgewandelt. Paß auf, dass du die richtige Reihenfolge einhälst: Erst htmlspecialchars(), dann nl2br().  
      
    Zusammengefaßt:  
    echo "<textarea>".htmlspecialchars($string)."</textarea>";  
    und  
    echo "Eingabe: ".nl2br(htmlspecialchars($string));  
      
    Das Speichern des Strings erfolgt unverändert, beispielsweise in einer Datei oder der Datenbank.  
      
     - Sven Rautenberg
    
    1. Hi Sven,

      Mal abgesehen davon, wie gut oder schlecht _diese_ obige Idee ist, die Frage: Woher kommt diese Textvariable genau? Kriegst du sie zufällig aus einer deiner Textareas, die ursprünglich mal leer waren? Dann solltest du anders vorgehen!

      Die Var kommt tatsächlich aus einer textarea und wurde bisher dann um die Sonderzeichen (und linebreaks) bereinigt; danach in die db gespeichert.

      Aber jetzt hab' ich Deinen Vorschlag genommen und die Zeilenumbrüche gelassen und erst bei der Anzeige werden sie evtl. dann in sichtbare Umbrüche umgewandelt; bei der Anzeige im Textarea kommt der Umbruch jetzt so wie es sein soll.

      Danke.

      Grüße
      Michael