Ankündigung

Einklappen
Keine Ankündigung bisher.

Zeilenumbrüche durch serialize() entfernt

Einklappen

Neue Werbung 2019

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

  • Zeilenumbrüche durch serialize() entfernt

    Hallo,

    ich bin gerade dabei, eine Eingabemaske zu schreiben, die automatisch speichert, sodass man später weitermachen kann.
    Damit ich keine halben Daten in der Datenbank habe, dachte ich mir, dass ich dies in einem Objekt speicher und dieses immer wieder mit:
    PHP-Code:
    file_put_contents($RecordPathserialize($record)); 
    auf dem Server speicher. Wenn alles eingegeben wurde, wird über eine Methode alles in die Datenbank geschrieben und somit habe ich dann keine halben Einträge und muss auch nicht zwischendurch etwas löschen, wenn der User von vorne beginnt.

    Soweit die allgemeine Beschreibung zu meinem vorhaben, nun zum Problem:

    Wenn der User einen Fließtext über eine Textarea hinzufügt, wird diese mithilfe von ajax an eine PHP Datei übergeben (POST), die das dann in das Objekt schreibt und wieder serialisiert.
    Empfang der Daten:
    PHP-Code:
    $mysqli->real_escape_string(htmlspecialchars(strip_tags($_POST['daten']), ENT_QUOTES)); 
    Wenn in diesem Fließtext Zeilenumbrüche sind, werden die einfach mit \n ersetzt. Bei der Ausgabe verwende ich die Methode nl2br(), damit die Zeilenumbrüche auch auftauchen. Leider funktioniert dies nicht.
    PHP-Code:
    echo nl2br($Dataset['Inhalt']); 
    Die Ausgabe ist einfach (Beispiel):
    Dort ist\nein Baum
    Meine Vermutung:
    Entweder es liegt daran, dass ich die Daten mit ajax übergebe oder an der Methode serialize. Denn das sind die einzigen Änderungen, die mit dem Zwischenspeichern zusammenhängen. Das es an der Übergabe mit Ajax liegt, halte ich für unwahrscheinlich, da es ja eigentlich einen normalen POST macht, den ich auch über eine <form> machen würde.

    Habt ihr eine Idee?

    Danke und Gruß


  • #2
    Zitat von GoatMachine Beitrag anzeigen
    PHP-Code:
    $mysqli->real_escape_string(htmlspecialchars(strip_tags($_POST['daten']), ENT_QUOTES)); 
    Mehr haste nicht gefunden?

    Zitat von GoatMachine Beitrag anzeigen
    Wenn in diesem Fließtext Zeilenumbrüche sind, werden die einfach mit \n ersetzt.
    So wie es in der Ausgabe aussieht, wird der Zeilenumbruch bei dir durch die zwei Zeichen \ und n ersetzt. Keine Ahnung, wozu.
    Zitat von nikosch
    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

    Kommentar


    • #3
      Zitat von tkausl Beitrag anzeigen
      Mehr haste nicht gefunden?
      Wie meinst du das? Mehr mache ich nicht, also kann ich mehr nicht finden.

      Zitat von tkausl Beitrag anzeigen
      So wie es in der Ausgabe aussieht, wird der Zeilenumbruch bei dir durch die zwei Zeichen \ und n ersetzt. Keine Ahnung, wozu.
      Ja, genau das ist das Problem. Ich habe auch keine Idee, woran das liegen könnte, da ich dieses vorgehen, wie oben bereits geschrieben, schon über mehrere Jahre hinweg nutze. Das einzige, was hinzu kam, ist die Übergabe mit Ajax und das serialisieren des Objekts.

      Kommentar


      • #4
        Ein bisschen mehr Quellcode wäre sicherlich hilfreich.
        Zitat von GoatMachine Beitrag anzeigen
        Wie meinst du das? Mehr mache ich nicht, also kann ich mehr nicht finden.
        Damit meine ich, dass du deinen Input durch 3 Funktionen jagst, wobei nur eine je nach Ziel nötig wäre.
        Zitat von nikosch
        Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

        Kommentar


        • #5
          Zitat von tkausl Beitrag anzeigen
          Ein bisschen mehr Quellcode wäre sicherlich hilfreich.
          Okay, mehr Quellcode. Das einzige, was mit dem Problem noch zusammenhängen könnte, wäre halt die Ajax Geschichte.
          Code:
          $.ajax
                          ({
                              type: "POST",
                              url: "Pfad",
                              data: {
                                  daten: Daten
                              }
                          });

          Zitat von tkausl Beitrag anzeigen
          Damit meine ich, dass du deinen Input durch 3 Funktionen jagst, wobei nur eine je nach Ziel nötig wäre.
          Ich escape es, wegen SQL Injection, dann damit ich keine iFrames drin habe und die Ausgabe mit nl2br, damit Zeilenumbrüche überhaupt so ausgegeben werden. Bisher war dies immer nötig, anders wurden keine Zeilenumbrüche ausgegeben. Die ersten beiden Funktionen rufe ich auf, wenn ich den Input in das Objekt schreibe und die 3., wenn ich den Inhalt ausgebe.

          Welche Funktion findest du denn unnötig? Es hat bisher immer funktioniert, darum nie etwas geändert und mich damit auch nicht weiter beschäftigt.

          Kommentar


          • #6
            In dem von dir geposteten Quelltext seh ich keine Möglichkeit, wo ein "\n" durch ein '\n' ersetzt werden könnte.
            Zitat von nikosch
            Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

            Kommentar


            • #7
              Zitat von tkausl Beitrag anzeigen
              In dem von dir geposteten Quelltext seh ich keine Möglichkeit, wo ein "\n" durch ein '\n' ersetzt werden könnte.
              Und jetzt erkennst du auch das Problem, was ich habe Es gibt keinen weiteren Code, der mit diesem Input in Berührung kommt. Natürlich kann ich die textarea posten, aber da ist nichts besonderes, was mir Zeilenumbrüche durch \n ersetzen könnte.

              Ich weiß es leider auch nicht und dachte, dass es vielleicht an serialze() liegt. Ich habe damit vorher noch nicht wirklich gearbeitet, darum kann ich noch nicht viel über das verhalten sagen. Es wird alles in eine Datei ohne Endung geschrieben. Wenn ich diese Datei mit dem normalen Editor öffne, stehen da schon die \n drin. Kann aber auch an file_put_contents liegen

              Kommentar


              • #8
                PHP-Code:
                <?php
                $str 
                "Test
                String"
                ;
                echo 
                unserialize(serialize($str));
                Ergibt:
                Code:
                Test
                String
                Also nein.
                Zitat von nikosch
                Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                Kommentar


                • #9
                  Bei mir erst, wenn ich ein nl2br dadrum setze, also:
                  PHP-Code:
                  <?php
                  $str 
                  "Test
                  String"
                  ;
                  echo 
                  nl2br(unserialize(serialize($str)));
                  Aber trotzdem ein Zeilenumbruch, also wird es wohl an file_put_contents liegen

                  Kommentar


                  • #10
                    Unwarscheinlich.
                    Zitat von nikosch
                    Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                    Kommentar


                    • #11
                      Bitte check den Quelltext im Browser, nicht die Ausgabe. Dein Browser rendert \n nämlich nicht zu einem Zeilenumbruch wenn er HTML darstellt.

                      Kommentar


                      • #12
                        Fehler entdeckt. -.-

                        $mysqli->real_escape_string() Ist der Grund, warum die Zeilenumbrüche nicht mehr erkannt werden. Es war ja auch noch nicht in der Datenbank, sondern nur im Objekt.

                        Danke für eure Bemühungen

                        Kommentar


                        • #13

                          Zitat von tkausl Beitrag anzeigen
                          Mehr haste nicht gefunden?
                          Und warum ist das überhaupt in "PHP-Fortgeschrittene" gelandet?
                          Zitat von nikosch
                          Macht doch alle was Ihr wollt mit Eurem Billigscheiß. Von mir aus sollen alle Eure Server abrauchen.

                          Kommentar


                          • #14
                            PHP-Code:
                            $mysqli->real_escape_string(htmlspecialchars(strip_tags($_POST['daten']), ENT_QUOTES)); 
                            Woher habt ihr immer nur diesen Unsinn??

                            Getreu dem Motto "Viel hilft viel" oder was?

                            Vom Web in die DB => real_escape
                            Von DB ins Web => htmlspecialchars

                            Mehr braucht es nicht, und schon gar nicht alles auf einmal.
                            Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.

                            Kommentar

                            Lädt...
                            X