Kalle_B: Textfeld: Zeilenschaltung erkennen

Hallöle,

ich erstelle eine csv- Datei von einer Tabelle, jeder Datensatz soll eine Zeile werden, die Felder getrennt mit Strichpunkt ;

Dabei ergibt sich das Problem, dass die Feldart TEXT Zeilenumbrüche enthalten kann.

Die möchte ich umwandeln in <br>.

Aber ich erkenne sie nicht, weder "\n", noch "\r\n" noch "\n\r".

Und in meinem Editor sehe ich am Zeilenende ein kleines Quadrat, keine Ahnung, welches Zeichen das ist.

Mit welchem Zeichen / Zeichenkombination muss ich in Textfeldern rechenn?

MfG Kalle

  1. Hallöle,

    Die möchte ich umwandeln in <br>.

    suchst du nl2br?

    Gruß Gunther

    1. Hallo Gunther,

      Die möchte ich umwandeln in <br>.

      suchst du nl2br?

      Nein, sucht er nicht!
      nl2br() ersetzt die Zeilenumbruchzeichen nicht, sondern ergänzt sie durch Einfügen eines <br /> oder <br> (je nach PHP-Version). Ob es davor oder danach eingefügt wird, habe ich derzeit vergessen, ist aber eigentlich dann wichtig, wenn man es wieder entfernen muss.

      Das Problem mit der CSV-Datei sollte man besser anders lösen, und zwar, indem man die Feldwerte zusätzlich in Begrenzungszeichen einpackt, also z.B.

      "feldinhalt 1";"feldinhalt 2";333;"Feldinhalt 4";"letztes Feld mit ""im Text"

      Numerische Felder müssen nicht "verpackt" werden, dürfen es aber. Allerdings kann Excel dann keine automatische Typunterscheidung (String / numerisch) mehr durchführen.

      Das Begrenzungszeichen ist typischerweise ein Doppelhäkchen und muss innerhalb der Textfelder durch Doppelung maskiert werden.

      Es sollten unbedingt alle Parameter der CSV-Funktionen auch benutzt werden.

      Erzeugen der CSV-Datei:
      http://de3.php.net/manual/en/function.fputcsv.php

      Lesen der CSV-Datei:
      [http://de3.php.net/manual/en/function.fgetcsv.php]

      LG
      Chris©

      1. Hi!

        Das wuerde dann wohl auch das Problem loesen wenn jemand ein Semikolon im Text benutzt. Ich nehm an darueber hat er sich auch noch keine Gedanken gemacht.

        1. Hallo,

          Das wuerde dann wohl auch das Problem loesen wenn jemand ein Semikolon im Text benutzt. Ich nehm an darueber hat er sich auch noch keine Gedanken gemacht.

          das nehme ich auch an - aber wieso Semikolon? Normalerweise werden die Felder im CSV-Format durch Komma getrennt, daher ja auch die Bezeichnung _C_omma _S_eparated _V_alues.
          Die Variante mit Semikolon taucht allerdings vereinzelt auch auf, ja. Ein Programm, das CSV-Eingaben verarbeitet, sollte daher mit beiden Varianten klarkommen.

          So long,
           Martin

          --
          Mir geht es gut. Ich mag die kleinen Pillen, die sie mir dauernd geben.
          Aber warum bin ich ans Bett gefesselt?
          1. ...aber wieso Semikolon?

            Weil der poese Pursche das so geschrieben hat. (Strichpunkt)

            Die Variante mit Semikolon taucht allerdings vereinzelt auch auf, ja. Ein Programm, das CSV-Eingaben verarbeitet, sollte daher mit beiden Varianten klarkommen.

            Excel kommt damit standardmaessig nicht klar. Wenn ich eine so aufgebaute Datei per Doppelklick oeffne landet erstmal alles in der ersten Spalte.

            1. Hallo,

              die SDF-Variante ist mit Semikolon und Doppelhäkchen. SDF war lange vor CSV da. CSV hat nur die Regeln etwas gelockert, um automatische Typunterscheidung möglich zu machen. Bei SDF galt die Regel: entweder alle Felder in Doppelhäckhen (oder einem anderen vereinbarten Begrenzer) einzupacken, oder gar keins. CSV hat dies gelockert und auf Alphanumerische Felder beschränkt. Numerische dürfen, müssen aber nicht.

              Die Variante mit Semikolon taucht allerdings vereinzelt auch auf, ja. Ein Programm, das CSV-Eingaben verarbeitet, sollte daher mit beiden Varianten klarkommen.

              Excel kommt damit standardmaessig nicht klar. Wenn ich eine so aufgebaute Datei per Doppelklick oeffne landet erstmal alles in der ersten Spalte.

              Excel kann auf Doppelklick mit Tabulatorzeichen als Feldtrenner umgehen, nicht jedoch mit Komma oder Semikolon.

              LG
              Chris©

              1. Excel kann auf Doppelklick mit Tabulatorzeichen als Feldtrenner umgehen, nicht jedoch mit Komma oder Semikolon.

                Hm. Unsere CSV mit Kommas werden aber immer gut dargestellt. Das ist ein Punkt, an dem ich sofort merken kann, wenn wir wieder falsch formatierte Daten bekommen haben. Wenn die Daten nicht eingelesen werden, oeffne ich die CSV Dateien in Excel. Bekomme ich ein ordentliches Excelsheet ist die Datei mit Kommas als Trennzeichen versehen und falsch. - und mit ziemlicher Sicherheit von der Urlaubsvertretung erstellt... ;)

            2. Hallo,

              [CSV mit Komma]
              Excel kommt damit standardmaessig nicht klar. Wenn ich eine so aufgebaute Datei per Doppelklick oeffne landet erstmal alles in der ersten Spalte.

              Ich weiß nicht, was du da machst - ich habe schon -zigal CSV-Dateien, die wirklich mit Komma getrennt sind, in Excel geöffnet - auf Anhieb per Doppelklick auf die csv-Datei.

              So long,
               Martin

              --
              Es existiert kein Weg, "für" etwas zu optimieren, sondern nur gegen alles andere.
                (Cheatah)
              1. Hi!

                Ich weiß nicht, was du da machst - ich habe schon -zigal CSV-Dateien, die wirklich mit Komma getrennt sind, in Excel geöffnet - auf Anhieb per Doppelklick auf die csv-Datei.

                Hm. Ich meinte, Excel kommt auf Anhieb nur mit Kommas klar, aber nicht mit anderen Trennzeichen. Wir trennen standardmaessig mit einem Semikolon.

                Das war nur eine Bemerkung auf die Anmerkung, das ein Toll, dass CSV unterstuetzt mit beiden Varianten klarkommen sollte. Excel kann erstmal nur eine (Kommas).

          2. echo $begrüßung;

            Normalerweise werden die Felder im CSV-Format durch Komma getrennt, daher ja auch die Bezeichnung _C_omma _S_eparated _V_alues.

            ... oder durch einen Doppelpunkt, daher ja auch die Bezeichnung Colon Separated Values.
            ... oder durch ein beliebiges Zeichen, daher ja auch die Bezeichnung Character Separated Values.

            Die Variante mit Semikolon taucht allerdings vereinzelt auch auf, ja. Ein Programm, das CSV-Eingaben verarbeitet, sollte daher mit beiden Varianten klarkommen.

            Da es für dieses Format keinen Standard gibt, sollte es mit beliebigen Zeichen klarkommen.

            Oh, Mist, da gibt es ja doch einen: RFC 4180. Aber die ist erst von Oktober 2005. Für das Format hat sich davor schon zu viel Wildwuchs angesammelt. Da hilft wohl auch keine RFC mehr.

            echo "$verabschiedung $name";

        2. Hi!

          ... Ich nehm an darueber hat er sich auch noch keine Gedanken gemacht.

          Hat er:

          for ( $i=1; $i<count( $row_val ) /2; $i++ )
              {
                $zeile .= ";".str_replace( ';', ',', $row_val[$i] );
              }

          Halbkomma (Semi-Kolon) fliegt raus und wird durch ein ganzes ersetzt.

          Das Programm muss fertig werden. KLar kann man alles schicker machen, aber irgendwo bleibt immer ein Loch, fragt mal Winzigweich.

          MfG Kalle

          1. Hallo,

            Hat er:

            for ( $i=1; $i<count( $row_val ) /2; $i++ )
                {
                  $zeile .= ";".str_replace( ';', ',', $row_val[$i] );
                }

            Halbkomma (Semi-Kolon) fliegt raus und wird durch ein ganzes ersetzt.

            Das ist aber ein sehr drastischer Eingriff... Ne Software, die sowas mit meinen Eingaben macht, faellt sofort durch.

            1. Hallo,

              for ( $i=1; $i<count( $row_val ) /2; $i++ )
                  {
                    $zeile .= ";".str_replace( ';', ',', $row_val[$i] );
                  }

              Halbkomma (Semi-Kolon) fliegt raus und wird durch ein ganzes ersetzt.

              Das ist aber ein sehr drastischer Eingriff... Ne Software, die sowas mit meinen Eingaben macht, faellt sofort durch.

              Finde ich auch.
              Wenn man schon solche brutalen Ersetzungen macht, sollte man wenigstens die Zeichen dafür verwenden, die klassisch dafür vorgesehen waren.

              Auf Wiki gibt es eine Liste der Steuerzeichen.
              http://de.wikipedia.org/wiki/Steuerzeichen

              Für den Datensatztrenner kommt da 30d = 0x1E in Frage und
              für den Feldtrenner 31d = 0x1F

              Da CSV in den Datenwerten eigentlich nur darstellbare Zeichen gestattet, also numerische Strings, aber keine Binärwerte, sind die Zeichen dafür bestens geeignet.

              LG
              Chris©

    2. Hallöle,

      suchst du nl2br?

      Funktioniert leider auch nicht, jetzt sind zwar einige <br /> vor dem Kästchen- Zeichen zu sehen, aber der Zeilenumbruch ist weiter vorhanden.

      Gruß, Kalle

      1. Hallöle,

        suchst du nl2br?

        Funktioniert leider auch nicht, jetzt sind zwar einige <br /> vor dem Kästchen- Zeichen zu sehen, aber der Zeilenumbruch ist weiter vorhanden.

        offenbar habe ich dein Ausgangsposting nicht ganz (richtig) verstanden.

        Und die Antwort von Chris ist auch nicht das Gewünschte?

        Dann sei doch bitte so nett, und formuliere dein Problem nochmal anders. Also welche Daten kommen woher, sollen wohin? Wie, wann und wo kommen jetzt das Textfeld und dein Editor ins Spiel?

        Gruß Gunther

        1. Hallöle,

          der Hinweis von Vinzenz in
          https://forum.selfhtml.org/?t=167779&m=1094450

          hat mich auf die Spur gebracht. So geht es:
              $zeile   = str_replace( chr(13).chr(10), "<br>", $zeile );
              $zeile   = str_replace( chr(10), "<br>", $zeile );
              $zeile   = str_replace( chr(13), "<br>", $zeile );
              $buffer .= $zeile."\n";

          Danke für eure Beratung.

          MfG Kalle

          1. echo $begrüßung;

            Danke für eure Beratung.

            Die besten Argumente hast du aber unberücksichtigt gelassen. Generell ist es nicht sinnvoll, in einer Datenhaltung Zeichen(folgen) zu haben, die auf ein bestimmtes Ausgabemedium zugeschnitten sind. Der Nachteil ist, dass dann für andere Ausgabemedien diese speziellen Zeichen(folgen) erst wieder dekodiert werden müssen, bevor die Daten in das Format des anderen Ausgabemediums gebracht werden können. Ganz besonders unsinnig ist es, solche Zeichen(folgen) einzufügen, weil man die grad kennt, aber die eigentlichen Möglichkeiten der verwendeten Datenhaltung nicht nutzt. Jede (ernstzunehmende) Datenhaltung hat seine eigenen Vorschriften, wie mit bestimmten Zeichen(folgen) umzugehen ist, damit diese die Speicherung gefahrlos überstehen und auch ohne Verlust wieder zurückgewandelt werden können.

            Du hast jetzt zwar die Zeilenumbrüche zu <br> gemacht. Was ist aber, wenn ein <br> in den Nutzdaten vorkommt und nicht für einen Zeilenumbruch stehen soll? Kannst du komplett ausschließen - und das auch für die Zukunft - dass du niemals ein <br> im Text stehen hast, das so drinstehen soll? Was passiert, wenn du andere < und > in den Daten hast. Die musst du bei der Ausgabe in Richtung HTML gesondert behandeln. Was wird dann aus den <br>? Spezielbehandlung rückwärts, damit es das htmlspecialchars() übersteht, das auf die Daten angewendet werden muss?

            echo "$verabschiedung $name";