Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Zeilenumbruch

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Zeilenumbruch

    Hallo.

    Ich habe einige Konfigurationsvariablen in die Datenbank verschoben.
    Vorher hatte ich sie einfach in einem Array gespeichert.

    Mit einer Klasse erzeuge ich aus einer der Konfigurationsvariablen ein Bild mit Text.
    Der Text in dem Bild hat Zeilenumbrüche.

    Mein Problem ist, dass die Zeilenumbrüche in dem Bild jetzt als "\n" ausgegeben werden. Vorher wurden die Zeilen korrekt umgebrochen.

    Zustand vorher:
    PHP-Code:
    $_config['adresse'] = "Dies ist\ndie Adresse\nmit Zeilenumbruechen.\n";
    ErstelleBild($_config['adresse']);
    /* Ausgabe im Bild:
    Dies ist
    die Adresse
    mit Zeilenumbruechen.
    */ 
    Zustand nachher:
    PHP-Code:
    $adresse $db->QuerySingle("SELECT value FROM Tabelle WHERE key = 'adresse' ");
    ErstelleBild($adresse);
    /* Ausgabe im Bild:
    Dies ist\ndie Adresse\nmit Zeilenumbruechen.\n
    */ 
    Wenn ich mir $adresse mit echo ausgeben lasse, dann hat es genau den selben Wert wie $_config['adresse']!
    Ich verstehe das nicht.

  • #2
    Willst du den Zeilenumbruch in der Ausgabe haben, oder gleich in die Datei.

    Ausgabe wäre einfacher mit [MAN]str_replace()[/MAN]
    MfG
    ~Capfly

    Kommentar


    • #3
      Weiss nicht genau was du meinst. Es geht nur um den String.

      Wenn ich ihn manuell auf $adresse = "test\ntest\ntest\n" setze, dann erhalte ich die Zeilenumbrüche.

      Wenn ich $db->QuerySingle("SELECT value FROM Tabelle WHERE key = 'adresse' ") mit echo ausgebe, dann erhalte ich auch nur einen String mit "test\ntest\ntest\n";

      Wenn ich der ErstelleBild()-Funktion dann manuell diesen String übergebe, dann erhalte ich Zeilenumbrüche.

      Kommt der String direkt von der Datenbank, dann werden die \n nicht geparst und ausgegeben.

      Kommentar


      • #4
        Okay. Hier die var_dump Ergebnisse:

        PHP-Code:
        var_dump(Config::GetFromDB'adresse' )); // (adresse enthaelt "Person\nStrasse\nPLZ Stadt\nLand\n")
        /*
        string(30) "Person\nStrasse\nPLZ Stadt\nLand\n"
        */ 
        Genau den selben String in das var_dump gefüttert:
        PHP-Code:
        var_dump("Person\nStrasse\nPLZ Stadt\nLand\n");
        /*
        string(28) "Person Strasse PLZ Stadt Land "
        */ 
        Die erste Version gibt die \n im Bild aus.
        Die zweite Version gibt die Zeilenumbrüche korrekt aus.

        Das verhält sich so als ob der Rückgabewert von der Datenbank ein String mit einfachen Anführungszeichen ist und die Steuerzeichen nicht automatisch ersetzt werden.

        Muss ich die \n irgendwie mit Steuerzeichen ersetzen wenn der String von der Datenbank kommt?

        EDIT:
        PHP-Code:
        $adresse str_replace('\n'chr(10), $adresse); 
        führt zum gewünschten Ergebnis.

        Offensichtlich werden Strings, die von der Datenbank kommen, wie "einfache" Strings behandelt.
        Das ist sehr nervig, weill ich alle Rückgabewerte von der Datenbank nach \n durchparsen muss...

        Kommentar


        • #5
          Zitat von chunky Beitrag anzeigen
          Offensichtlich werden Strings, die von der Datenbank kommen, wie "einfache" Strings behandelt.
          Nein, das ist eine vollkommen falsche Schlussfolgerung.

          Du hast, aus irgendwelchen nicht nachvollziehbaren Gründen, im Datenbankinhalt keine echten Zeilenumbrüche, sondern die Zeichenkombinataion \n drin stehen - also hast du beim Einfügen der Daten in die Datenbank etwas falsch gemacht.
          [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

          Kommentar


          • #6
            Wenn man in die Datenbank den Text mit \n als Text einträgt ist es auch kein Wunder, wenn genau das wieder herauskommt oder ?

            Wenn man den Text mit Zeilenumbrüchen statt \n einträgt (\n ist hier ein String, kein Umbruch!) funktioniert das ganze dann wieder.

            Kommentar

            Lädt...
            X