Neuigkeiten:

moziloCMS verwendet Cookies. Wenn Sie auf unserer Seite weitersurfen, stimmen Sie der Cookie-Nutzung zu Datenschutzerklärung
moziloCMS Layouts
moziloCMS Plugins

Hauptmenü

moziloWiki mit PHP 5.4: Leere Einträge (und was man dagegen tun kann)

Begonnen von azett, 16. März 2013, 21:50:02

« vorheriges - nächstes »

azett

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 :)

azett

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
return htmlentities($value);natürlich heißen:
return htmlentities($value, ENT_COMPAT | ENT_HTML401, "ISO-8859-1");