Jan K.: Zeilenumbruch entfernen

Hallo Forum,

mich treiben die Zeilenumbrüche im Arrayelement "projectdescription" in den Wahnsinn:

Mit $x=trim($x) bekomme ich die nicht weg un Versuche mit str_replace("\n","",$x) bringen auch nichts, die Zeilenumbrüche wehren sich standhaft gegen Entfernung!

So sieht der Text "projectdescription" in der Datenbank aus:

Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.

Hat jemand eine Ahnung wie ich die Zeilenumbrüche loswerden kann?

Grüße aus Berlin,
Jan

  1. Hi,

    mich treiben die Zeilenumbrüche im Arrayelement "projectdescription" in den Wahnsinn: [...]
    Mit $x=trim($x) bekomme ich die nicht weg

    Logisch, trim trimmt nur an den Rändern, nicht mittendrin.

    un Versuche mit str_replace("\n","",$x) bringen auch nichts, die Zeilenumbrüche wehren sich standhaft gegen Entfernung!

    Dann sind sie vermutlich nicht \n bzw. nicht nur \n.
    Dass Zeilenumbrüche je nach Betriebssystem bzw. daran angelehnter Speicherungsart unterschiedliches Format haben können, sollte doch wohl bekannt sein.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
  2. hi,

    Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.

    Wenn die JS-Funktion alert() heißt, geht es: alert("Zeile 1\nZeile 2") zeigt beide Zeilen untereinander.

    Siehe auch ChrisB, finde heraus, wie auf Deinem System ein Zeilenumbruch kodiert ist und breite das entsprechend auf.

    Hotti

    1. Hi,

      hi,

      Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.

      Wenn die JS-Funktion alert() heißt, geht es: alert("Zeile 1\nZeile 2") zeigt beide Zeilen untereinander.

      Das ist ja auch ein anderer Kontext. Wenn ich das vom OP gesagt auf dein Beispiel übersetze:

        
      $string = "Zeile1\nZeile2";  
      echo 'alert("' . $string . "');'; // bewusst falsch!  
      
      

      Die Ausgabe ist folgendes (im JS-Kontext):

      alert("Zeile1  
      Zeile2");
      

      und dabei kommt dann die Fehlermeldung (im Browser, hier FF):
      Fehler: unterminated string literal
      Quelldatei: http://localhost/~matti/ttt.html
      Zeile: 9, Spalte: 9
      Quelltext:
         alert("Zeile1

      Bis die Tage,
      Matti

  3. Hello Jan,

    mich treiben die Zeilenumbrüche im Arrayelement "projectdescription" in den Wahnsinn:

    Mit $x=trim($x) bekomme ich die nicht weg un Versuche mit str_replace("\n","",$x) bringen auch nichts, die Zeilenumbrüche wehren sich standhaft gegen Entfernung!

    Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.

    Dann solltest Du alle Whitespaces erst dann in Leerzeichen umwandeln, wenn es soweit ist, Du also die Javascript-Funktion "fütterst".

    Dafür könntest Du str_replace() in der Arrayvariante benutzten.
    http://de.php.net/manual/en/function.str-replace.php

    Erst die Mehrbytezeichen ersetzen, dann die verbliebenen Einbytezeichen.
    http://php.net/manual/en/language.types.string.php siehe Tabelle

    "\r\n" sollte die erste Sequenz sein, nach der Du suchen lässt, dann "\r", "\n" und die übrigen.

    Außerdem ist es empfehlenswert, sich auch nochmal
    http://wiki.selfhtml.org/wiki/Artikel:Kontextwechsel
    durchzulesen.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Besten Dank, \r\b funktioniert bestens.

      Den Artikel aus dem Wiki habe ich mir gespeichert und lese mir den demnächst durch.

      Gruß,
      Jan

      1. Besten Dank, \r\b funktioniert bestens.

        Ein vertipper, du meinst \r\n - aber auch das ist nicht sicher,

        Eu solltest eher \r, \n oder \r\n suchen (auch in mehrfacher Eusfertigung) suchen.

        Elegant lässt sich das mit dem Ausdruck /\r|\n|\r\n/ oder /(\r|\n)+/ beschreiben.

        1. Hello,

          Besten Dank, \r\b funktioniert bestens.

          Ein vertipper, du meinst \r\n - aber auch das ist nicht sicher,

          Eu solltest eher \r, \n oder \r\n suchen (auch in mehrfacher Eusfertigung) suchen.

          Elegant lässt sich das mit dem Ausdruck /\r|\n|\r\n/ oder /(\r|\n)+/ beschreiben.

          Es müssen erst die längsten, dann die kürzeren Sequenzen gesucht und ersetzt werden, sonst werden "\r\n" eventuell als zwei Zeichen angesehen. Ist ja sozusagen ein "Multibyte-Zeichen".

          Liebe Grüße aus dem schönen Oberharz

          Tom vom Berg

          --
           ☻_
          /▌
          / \ Nur selber lernen macht schlau
          http://bergpost.annerschbarrich.de
      2. Hello,

        Besten Dank, \r\b funktioniert bestens.

        Du meinst "\r\n" ?

        Dann solltest Du anschließend aber noch die anderen Whitespaces (außer Leerzeichen) in Leerzeichen umwandeln. Was User so senden, ist nie wirklich sicher. Das Format sollte deshalb immer vor der Weiterverarbeitung auf den nächsten Schritt vorbereitet werden, also kontextgerecht aufbereitet werden.

        In der DB kannst Du trotzdem die Rohdaten des Users (selbstverständlich auch für die Speicherung vorbehandelt, also 'escaped'), speichern. Wer weiß jetzt schon, wofür du sie später in der vollständigen Form noch benötigen wirst?

        Den Artikel aus dem Wiki habe ich mir gespeichert und lese mir den demnächst durch.

        Ja, der sollte Dir noch ein paar neue Anregungen geben, auf was Du wann achten solltest.

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  4. Hi!

    Mit $x=trim($x) bekomme ich die nicht weg un Versuche mit str_replace("\n","",$x) bringen auch nichts, die Zeilenumbrüche wehren sich standhaft gegen Entfernung!

    Wenn es wirklich um die Zeilenumbrüche ginge, wäre es sinnvoll, entweder alle Kombinationen von \r und \n zu beachten oder sich zunächst zu informieren, welche Zeichen da nun wirklich vorhanden sind. Missbrauchen lässt sich dafür die Funktion url_encode(). Anhand der %xx-Werte und einer ASCII-Tabelle kann man die Zeichen identifizieren.

    Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.

    Dann ist das eigentliche Problem nur/wieder ein nicht beachteter Kontextwechsel. Die Zeilenumbrüche müssen nicht unbedingt verschwinden, nur Javascript-gerecht notiert werden. Eine Funktion dafür ist im bereits verlinkten Artikel zu finden.

    Lo!

  5. Das Probelm ist das ich mal eine Javascript-Funktion damit füttern will, was nicht geht wenn der Text mehrzeilig ist.

    Mal mit JSON versucht?
    http://de.php.net/manual/en/function.json-encode.php