Linuchs: Wie var_dump(array) mit htmlspecialchars kombinieren?

Moin,

für bestimmte Zwecke speichere ich HTML-Code in der Datenbank.

Zwecks Kontrolle möchte ich den HTML-Code wie <table> sehen, aber es wird die Tabelle gezeigt, nicht der Code dazu:

echo "<pre>";
//var_dump(htmlspecialchars($row)); // Fehler, weil $row ein Array ist
htmlspecialchars(var_dump($row));
echo "</pre>";

Klar, ich kann das mit [Strg][U] im Quellcode ansehen, geht das nicht anders?

Linuchs

  1. Tach!

    echo "<pre>";
    htmlspecialchars(var_dump($row));
    echo "</pre>";
    

    Klar, ich kann das mit [Strg][U] im Quellcode ansehen, geht das nicht anders?

    Im Gegensatz zu var_dump() hat print_r() einen Parameter, der das Ergebnis zurückgibt, statt direkt auszugeben. Für var_dump() müsstest du Output Buffering verwenden. Da ist die Quellcode-Anzeige einfacher zu haben.

    dedlfix.

  2. Klar, ich kann das mit [Strg][U] im Quellcode ansehen, geht das nicht anders?

    Für mich ist die Quelltextansicht tatsächlich der Königsweg für solche Kontrollausgaben / Debugs.

    Einmal in der Quelltextansicht angekommen, kann man auch dort beliebig Reloads auslösen und man muss sich garantiert keine Gedanken um irgendwelche Interpretationen machen.

  3. Idee: Dump's mit Content-Type: text/plain ausgeben. MFG

    1. Tach!

      Idee: Dump's mit Content-Type: text/plain ausgeben. MFG

      Existiert bereits ohne weiteren Aufwand im Browser als Quelltextanzeige. Zusätzlich bekommt man dort noch Zeilennummern und Syntaxhervorhebung.

      dedlfix.

      1. Tach!

        Idee: Dump's mit Content-Type: text/plain ausgeben. MFG

        Existiert bereits ohne weiteren Aufwand im Browser als Quelltextanzeige. Zusätzlich bekommt man dort noch Zeilennummern und Syntaxhervorhebung.

        Nein es ist eben nicht dasselbe. Im Übrigen braucht man bei einem Dump keine Syntaxhervorhebung sondern eine Ausgabe die das Wesentliche eines Dumps, nämlich die Ausgabe einer Datenstruktur in text/plain, nicht verfälscht. Und das heißt auch, daß man ein htmlspecialchars(var_dump($row)); (Dein Vorschlag) nicht machen sollte.

        MFG

        #ps. ein Dump braucht auch keine Zeilennummern!

        1. Moin,

          Und das heißt auch, daß man ein htmlspecialchars(var_dump($row)); (Dein Vorschlag) nicht machen sollte.

          Da kann doch eigentlich gar nichts passieren, weil var_dumpvoid zurückgibt“.

          Viele Grüße
          Robert

          1. Moin,

            Und das heißt auch, daß man ein htmlspecialchars(var_dump($row)); (Dein Vorschlag) nicht machen sollte.

            Da kann doch eigentlich gar nichts passieren, weil var_dumpvoid zurückgibt“.

            Viele Grüße
            Robert

            Der Vorschlag war von dedlfix

            MFG

            1. Nö, lies noch mal bitte seinen Vorschlag genau.

              1. Gerade in PHP gibt es sehr viele Möglichkeiten zur Fehlerbehandlung die allesamt das Ziel verfolgen, ebendiese und damit auch das Entwickeln selbst zu vereinfachen. Warum sollt man das dann noch komplizierter machen!?

                Also wird man ohnehin eine Exception- oder Errorhandler haben den man auch beim Entwickeln aufrufen kann zum Ausgeben einer Datenstruktur oder auch skalare Variablen und zwar ohne große Umschreife. Und natürlich wird dieser Errorhandler das was bis dahin im Outbuffer steht verwerfen und bei dieser Gelegenheit auch den Content-Type setzen der einem Dump entspricht: text/plain. Und ein solcher Errorhandler wird dann auch das Programm beenden.

                MFG

                1. Jo, und zu Fuß ist schneller als über den Berg.

        2. Hallo pl,

          die Frage ist, welchen Zweck Linuchs mit dieser Ausgabe verfolgt.

          Geht um Fehlersuche während der Entwicklung? -> Browsertools verwenden

          Handelt es sich darum, dass seine Webseite HTML Fragmente speichert, die er sich zur Kontrolle anzeigen möchte -> Der Browser sollte den Quelltext als Teil der Seite anzeigen.

          Ich habe den Eindruck, es handelt sich um letzteres.

          Was mir allerdings noch nicht klar ist, ist der Einsatz des Arrays. Die Ausgabe von print_r oder var_dump ist nicht unbedingt ideal um sich HTML Fragmente anzuschauen. Ich würde ja $row Array iterieren und pro Eintrag ein <pre> Element erzeugen, ggf. mit einer Überschrift wie "HTML Fragment Nr. 7".

          Rolf

          --
          sumpsi - posui - clusi
          1. Die Ausgabe von print_r oder var_dump ist nicht unbedingt ideal um sich HTML Fragmente anzuschauen.

            Das ist ja auch nicht der Sinn und Zweck von Dumps.

            MFG

            1. Hallo pl,

              eben.

              Und darum meine ich: Für den mutmaßlich beabsichtigten Zweck sind Dumps nicht das richtige.

              Rolf

              --
              sumpsi - posui - clusi
              1. Für den mutmaßlich beabsichtigten Zweck sind Dumps nicht das richtige.

                Ein Dump dient dazu Variablen in text/plain anschaulich zu machen. MFG

        3. Tach!

          Idee: Dump's mit Content-Type: text/plain ausgeben. MFG

          Existiert bereits ohne weiteren Aufwand im Browser als Quelltextanzeige. Zusätzlich bekommt man dort noch Zeilennummern und Syntaxhervorhebung.

          Nein es ist eben nicht dasselbe. Im Übrigen braucht man bei einem Dump keine Syntaxhervorhebung sondern eine Ausgabe die das Wesentliche eines Dumps, nämlich die Ausgabe einer Datenstruktur in text/plain, nicht verfälscht.

          Das Unverfälschte hat man auch mit Zeilennummern und Farbe. Und zwar ganz ohne Aufwand, die passende Stelle im Code zu finden, um vor allen anderen Ausgaben eine HTTP-Header-Zeile auszugeben.

          Und das heißt auch, daß man ein htmlspecialchars(var_dump($row)); (Dein Vorschlag) nicht machen sollte.

          Hab ich nicht vorgeschlagen, das war ein Zitat von einem nicht funktionierenden Versuch. Auch die Variante mit print_r() und dem Output Buffering habe ich nicht vorgeschlagen, sondern nur als Möglichkeiten aufgezählt.

          dedlfix.

          1. htmlspecialchars verändert den Inhalt! Wer sich Inhalte von Variablen unverfälscht anschauen also <table> sehen will und nicht &lt;table&gt;, wird genau das nicht haben wollen.

            Und wie schon sooft gesagt, ich mache hier nur Vorschläge aufgrund meiner Erfahrung. Selbstverständlich kann man das ignorieren und gut isses.

            Aber was hier abgeht, ist einfach nur unterirdisch. So diskutieren nicht einmal Laien!

            MFG

            1. Tach!

              htmlspecialchars verändert den Inhalt!

              Escaping ist dafür da, den Inhalt so rüberzubringen, wie er ist, wenn er vorübergehend in einem anderen Kontext eingebettet werden soll. Wenn er am Ziel ein anderer als am Start der Reise ist, dann war nur die Wahl des Escapings nicht passend zum Kontext, aber nicht die Tastsache, dass der Inhalt verändert wurde. Der Inhalt wird sowieso auf seiner Reise durch die Schichten der Anwendung und dem Übertragungsmedium mehrfach verändert und wiederhergestellt.

              dedlfix.