Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Zeilenumbruch

Einklappen

Neue Werbung 2019

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

  • chunky
    hat ein Thema erstellt [Erledigt] Zeilenumbruch.

    [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.

  • Papst
    antwortet
    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.

    Einen Kommentar schreiben:


  • ChrisB
    antwortet
    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.

    Einen Kommentar schreiben:


  • chunky
    antwortet
    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...

    Einen Kommentar schreiben:


  • chunky
    antwortet
    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.

    Einen Kommentar schreiben:


  • Capfly
    antwortet
    Willst du den Zeilenumbruch in der Ausgabe haben, oder gleich in die Datei.

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

    Einen Kommentar schreiben:

Lädt...
X