mozilo Forum

moziloWiki => Tipps und Tricks => Thema gestartet von: azett am 16. März 2013, 21:50:02

Titel: moziloWiki mit PHP 5.4: Leere Einträge (und was man dagegen tun kann)
Beitrag von: azett am 16. März 2013, 21:50:02
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() (http://php.net/manual/de/function.htmlentities.php) 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 :)
Titel: Re: moziloWiki mit PHP 5.4: Leere Einträge (und was man dagegen tun kann)
Beitrag von: azett 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");