Website wird nicht mehr richtig angezeigt - PHP verschluckt Eingaben

  • Hi,

    ich habe ein Problem mit meiner Website und weiß einfach nicht mehr weiter. Ich vermute das es mit dem Server zusammenhängt, aber bevor ich bei meinem Webhoster anrufe würde ich gerne herausfinden warum es so ist wie es ist. Vielleicht kann ich es ja doch selber reparieren.

    Seit gestern wird meine Website einfach nicht mehr korrekt angezeigt. Ich habe nichts am Code geändert, aber die Ausgaben sind nun nicht mehr vollständig. Es werden einfach belegte Variablen nicht mehr ausgegeben. Und so fehlt einfach Inhalt.

    Zum Beispiel war vor 2 Tagen folgende Menüs so aus:


    Nun sehen sie so aus:

    Die Überschrift Menü ist einfach verschwunden und auch die Kommentarvorschau die mit SQL geladen wurden sind einfach nicht mehr dargestellt. Und das zieht sich durch die komplette Homepage.
    Das es am Code liegt sehe ich als unwahrscheinlich an, da ich da nichts geändert habe und es sich auf alle meine Projekte die ich auf dem Server laufen habe konsequent durchzieht.
    Die Frage ist nur warum? Und warum jetzt, wenn es vorher doch funktionierte?

    Ich hoffe das vielleicht jemand weiß was es sein könnte oder eine grobe Ahnung hat. Fehlercodes werden auch keine angezeigt.
    Danke schon mal für eure Hilfe.

  • Ganz ehrlich, mit der Problembeschreibung können wir nichts anfangen. Ohne Link und Quellcode ist fast jede Hilfe nur eine Rumraterei. Nur diesen Tipp kann ich dir geben:

    Richtig debuggen

    • Man bemerkt, dass ein Skript nicht das tut, was es soll.
    • Man schreibt an den Anfang des Scriptes die Zeile: error_reporting(-1);
    • Man verwendet ini_set('display_errors', true); damit die Fehler auch angezeigt werden.
    • Man versucht, die Stelle die daran Schuld sein kann, schonmal einzugrenzen. Falls dies nicht geht, wird zunächst das komplette Skript als fehlerhaft angesehen.
    • An markanten Stellen im Skript lässt man sich wichtige Variableninhalte ausgeben und ggf. auch in bedingten Anweisungen eine kurze Ausgabe machen, um zu überprüfen, welche Bedingung ausgeführt wurde. Wichtig bei MySQL Fehlern (...not a valid MySQL result resource...:( mysqli_error() verwenden oder Abfrage ausgeben und zb mit phpmyadmin testen.
    • Schritt 5 wird so lange wiederholt, bis Unstimmigkeiten im Skript auffallen
    • Damit hat man das Problem (Unstimmigkeit) gefunden und kann versuchen diese zu beheben. Hierzu dienen dann die PHP-Dokumentation und andere Quellen als Ratgeber.
    • Lässt sich das konkrete Problem trotzdem nicht beheben, kann man in Foren um Rat fragen.
    • Das Programm läuft und man kann die Debug-Ausgaben wieder entfernen.
  • Ich habe nun nach langem suchen und der Info das der Server wo meine Seite drauf liegt die PHP Version auf 5.4 geändert hat den Fehler gefunden. Auch wenn ich ihn nicht so richtig verstehe.
    Das Problem liegt an htmlspecialchars und an htmlentities. Diese Funktionen wurden mit der Version 5.4 so geändert das sie nicht mehr Standardmäßig ISO-8859-1 erwarten sondern UTF-8. Es scheint dann so dass dann alle Strings auf meiner Website die Umlaute enthielten durch die Funktionen zu leeren Strings umgewandelt wurden. (Warum auch immer)
    Da bei mir alles durch diese Filter läuft, fehlten dann Texte überall auf der Website. Scheinbar wahllos.

    Mit htmlentities($input,ENT_COMPAT | ENT_HTML401 , 'ISO-8859-1'); hat sich das Problem nun gelöst. Warum aber die Funktion den kompletten String verschluckt hat ist mir ein Rätsel.