Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeilenumbrüche in MySQL-Datenbank

Einklappen

Neue Werbung 2019

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

  • Zeilenumbrüche in MySQL-Datenbank

    Hallo,

    ich möchte den Text einer versendeten Email mit beinhalteten Zeilenumbrüchen (mittels \n) in einer MySQL-Datenbank speichern.

    Die Absätze mittels "/n" benötige ich ja nur für die korrekte Dartstellung in der Email.

    Wenn ich hingegen Texte mit Zeilenumbrüchen aus einer "textarea" eines HTML-Formulars in der Datenbank speichere, so wird das automatisch korrekt gespeichert. Dass heißt, wenn ich mir die Datensätze mit phpMyAdmin anschaue, so sieht man keine Sonderzeichen für die Absätze.

    Wie kann ich den Text wieder so umwandeln (wodurch das "\n" ersetzen) damit ich den Text mit Zeilenumbrüchen wie aus einer textarea speichern kann ?

    Ich hoffe, dass ich die Frage einigermaßen verständlich formuliert habe.

    Gruss von Markus


  • #2
    so sieht man keine Sonderzeichen für die Absätze.
    Ja, weil das \n IST der Absatz.

    Wie kann ich den Text wieder so umwandeln (wodurch das "\n" ersetzen) damit ich den Text mit Zeilenumbrüchen wie aus einer textarea speichern kann ?
    Verstehe ich nicht. Du hast den Text korrekt in der DB und willst dann was damit machen? Wohin speichern? Du sparchst doch davon das du den ja schon in der DB korrekt gespeichert hast und irgendwas von Mail?!
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Es ist vollkommen egal, ob ein Zeilenumbruch aus einem HTML-Formular oder einer Datenbank kommt. Zeilenumbruch ist Zeilenumbruch.

      Kommentar


      • #4
        Also, es ist so, dass ich Posteingange (über ein Kontaktformular) wie auch versendete Nachrichten zu Dokumentationszwecken in einer Datenbank speichern möchte.

        Die über das Kontaktformular versendeten Nachrichten werden mit Absätzen in der Datenbank gespeichert, ohne dass hier in dem entsprechenden Feld ein Sonderzeichen wie z.B. "\n" erkennbar ist. Wenn ich den Datensatz anzeigen lasse, erscheinen die Absätze korrekt.

        Wenn ich hingegen Emails versende, so muss ich für die Email die Absätze mit „\n“ kennzeichnen. Die "\n" werden dann aber in der Datenbank mitgespeichert und erzeugen bei der Ausgabe auch keinen Absatz, sondern werden als Text „\n“ ausgegeben.

        Mir fehlt quasi die Funktion diese „\n“ in Absätze für die Datenbank umzuwandeln.

        Gruss von Markus

        Kommentar


        • #5
          Ohne zu wissen, was du machst, ist es halt schwer festzustellen, was du falsch machst. Prinzipiell sollte alles ohne Spezialeingriffe funktionieren. Wenn es das nicht tut, dann passiert irgendwo ein Fehler und diesen gilt es zu suchen und zu beseitigen.

          Kommentar


          • #6
            What.
            Die Schriftgröße ist hier eh schon viel zu klein, da muss die nicht noch kleiner formatiert werden
            Dass heißt, wenn ich mir die Datensätze mit phpMyAdmin anschaue, so sieht man keine Sonderzeichen für die Absätze.
            Das liegt daran, dass in der Ansicht die \n schon interpretiert werden. Die sind aber immer noch da, werden nur anders angezeigt.

            Wenn ich hingegen Emails versende, so muss ich für die Email die Absätze mit „\n“ kennzeichnen. Die "\n" werden dann aber in der Datenbank mitgespeichert und erzeugen bei der Ausgabe auch keinen Absatz, sondern werden als Text „\n“ ausgegeben.
            Nimmst du diese "Kennzeichung" noch einmal gesondert vor? Hast du die Texte schonmal einfach aus der Datenbank geladen und ohne weitere Bearbeitung in die Email gepackt?
            [COLOR=#A9A9A9]Relax, you're doing fine.[/COLOR]
            [URL="http://php.net/"]RTFM[/URL] | [URL="http://php-de.github.io/"]php.de Wissenssammlung[/URL] | [URL="http://use-the-index-luke.com/de"]Datenbankindizes[/URL] | [URL="https://www.php.de/forum/webentwicklung/datenbanken/111631-bild-aus-datenbank-auslesen?p=1209079#post1209079"]Dateien in der DB?[/URL]

            Kommentar


            • #7
              Zitat von Jeff-Glenn-Fox Beitrag anzeigen
              Wenn ich hingegen Emails versende, so muss ich für die Email die Absätze mit „\n“ kennzeichnen. Die "\n" werden dann aber in der Datenbank mitgespeichert und erzeugen bei der Ausgabe auch keinen Absatz, sondern werden als Text „\n“ ausgegeben.

              Mir fehlt quasi die Funktion diese „\n“ in Absätze für die Datenbank umzuwandeln.
              Das ist der falchen Ansatz. Deine Mail sollte bis zum Schluss echte Zeilenumbrüche haben und erst wenn du die Mail "abgibst" wandelst du diese ggf. in das benötigite Format um. Damit hast du gar nicht das Problem Escape Sequenzen umwandeln zu müssen.

              Das klingt aber auch eigenartig. Wie versendest du die Mails? Es ist zwar möglich, dass Zeilenumbrüche esacpt werden müssen, aber das ist komplett low level. Ich kann mir nicht vorstellen dass das korrekt ist.

              Ansonsten: mit stripcslashes() kannst du die Escape Sequenzen sauber dekodieren.

              Kommentar


              • #8
                Hallo,

                die Mails versende ich teilweise auch über ein Kontaktformular, wo es keine Probleme gibt, aber auch eben direkt über die Mailfunktion, wo der Text aus einer Variablen kommt. Also als Beispiel:

                $inhalt = „Sehr geehrter Herr XY,\n\n“Standardtext, der dynamisch zusammengesetzt wird\n\nGrussformel“;

                Und da ist mir nicht bekannt, wie ich die Absätze anders erzeugen soll.

                Dann komm ich nicht drum herum die Escape Sequenzen mit stripcslashes() sauber zu dekodieren.

                Gruss von Markus

                Kommentar


                • #9
                  Wie versendest du die Mail? Mit mail()? Denn mail() sollte nicht für den Mail-Versand verwendet werden, da dessen Nutzung weitaus komplexer und gefährlicher ist, als man als Anfänger vermuten würde. Du solltest einen richtigen Mailer wie z.B. PHPMailer verwenden.

                  Kommentar


                  • #10
                    Hallo,

                    danke für den Hinweis. Hatte ich vergessen zu erwähnen, ich verwende mittlerweile für den Versand ebenfalls den phpMailer.

                    Gruss von Markus

                    Kommentar


                    • #11
                      Du solltest ein vollständiges kleines Beispiel liefern, bei dem das Problem nachvollziehbar auftritt.

                      Kommentar


                      • #12
                        Dann fügst du die Daten falsch in die DB ein. Du escapst den Wert doppelt beim Einfügen in DB, oder escapst, obwohl der Wert nicht escapt werden darf. (prepared statments) Ansonsten würde in deinen Mail statt des Zeilenumbruchs auch "\n" stehen,

                        Kommentar


                        • #13
                          Zitat von erc Beitrag anzeigen
                          Ansonsten würde in deinen Mail statt des Zeilenumbruchs auch "\n" stehen,
                          Eher umgekehrt. In einer Mail sollte doch ein richtiger Zeilenumbruch stehen und nicht "\n". Wenn sowas in einer Mail steht, die ich erhalte, würde ich als erstes von Spam ausgehen.

                          Kommentar


                          • #14
                            Hallo,

                            "Prepared Statements" benutze ich bereits.

                            Anmerkung: Für die Speicherung in der Datenbank benutze ich den String des $altBody (phpMailer), weswegen ich ja "\n" für die Absätze benutzen muss. Bei der HTML-Variante der Email benutze ich hingegen <p></p> zur Erzeugung der Absätze. In der Datenbank will ich aber weder HTML-Tags noch "\n" mit abspeichern, so dass dann ja nur die Variante mit den striplashes() bleibt.

                            Ein komplettes Beispiel kann ich erst nachher posten, da ich im Moment unterwegs bin.

                            Gruss von Markus

                            Kommentar


                            • #15
                              Wenn du "\n" schreibst, meinst du hier in Byte-Schreibweise 0x0A oder 0x5C 0x6E? Das erste ist ein Zeilenumbruch, das zweite ist ein Backslash gefolgt von einem kleinen N.

                              Kommentar

                              Lädt...
                              X