forum.mozilo.de das Supportforummozilo Forum
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

Einloggen mit Benutzername, Passwort und Sitzungslänge

Autor Thema: moziloWiki mit PHP 5.4: Leere Einträge (und was man dagegen tun kann)  (Gelesen 6051 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

 

Offline azett

  • Coder
  • Mitglied
  • ****
  • Beiträge: 2394
  • mozilo-Coder a.D.
    • Profil anzeigen
    • arvidzimmermann.de
Das Problem
Bei einem Umzug einer moziloWiki-Instanz auf einen anderen Server stolperte ich über folgendes Problem: Das Wiki an sich - Layout, Menüs, die ganze Seitenstruktur - wurde zwar korrekt angezeigt, nicht aber die Inhalte der einzelnen Einträge. Die blieben einfach leer.

Die Ursache
Auf dem neuen Server läuft PHP 5.4 - und da hat sich etwas an der von moziloWiki verwendeten Funktion htmlentities() verändert: Der Wert des optionalen Parameters encoding ist nun nicht mehr ISO-8859-1, sondern UTF-8.
Wird htmlentities() ohne den Encoding-Parameter aufgerufen, muss der übergebene Inhalt also UTF8-kodiert sein, sonst liefert die Funktion schlicht einen leeren String zurück. Genau das passiert bei moziloWiki, denn es arbeitet mit ISO-8859-1. Mit dem eingangs beschriebenen Ergebnis: Der Inhalt der Wiki-Einträge ist leer.

Die Lösung
Beim Aufruf der Methode htmlentities() in moziloWiki muss man explizit angeben, dass der übergebene Text in ISO-8859-1 vorliegt. Dann zeigt moziloWiki wieder den Inhalt der Einträge an.
Man nehme also Zeile 62 in WikiSyntax.php...
// content formatting
$content = htmlentities($content);
...und ersetze sie durch...
// content formatting
$content = htmlentities($content, ENT_COMPAT | ENT_HTML401, "ISO-8859-1");

Und schon funktioniert moziloWiki auch mit PHP 5.4 :)
 

 

Offline azett

  • Coder
  • Mitglied
  • ****
  • Beiträge: 2394
  • mozilo-Coder a.D.
    • Profil anzeigen
    • arvidzimmermann.de
Re: moziloWiki mit PHP 5.4: Leere Einträge (und was man dagegen tun kann)
« Antwort #1 am: 12. Oktober 2013, 13:11:57 »
Nachtrag:
Nicht nur Einträge bleiben u.U. leer, sondern auch Wiki-Standardtexte (z.B. das Wort "Paßwort" in der Login-Maske). Das Problem ist dasselbe wie oben beschrieben, die Lösung auch.

Diesmal in Zeile 36 der WikiLanguage.php. Dort muss es statt
Code: PHP [Auswählen]
return htmlentities($value);
natürlich heißen:
Code: PHP [Auswählen]
return htmlentities($value, ENT_COMPAT | ENT_HTML401, "ISO-8859-1");